Skip to content

Commit

Permalink
MDEV-18946: innodb: {de|}allocate_large_{dodump|dontdump} added
Browse files Browse the repository at this point in the history
In 1dc78d3 the arguments
to a deallocate_large(dontdump=true) was passed a wrong value.

To avoid accidential calling large memory function that have
DODUMP/DONTDUMP options and missing arguments, the functions
have been given distinct names.
  • Loading branch information
grooverdan committed Mar 16, 2019
1 parent 8678a10 commit a9056a2
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 17 deletions.
16 changes: 7 additions & 9 deletions storage/innobase/buf/buf0buf.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1571,8 +1571,7 @@ buf_chunk_init(

DBUG_EXECUTE_IF("ib_buf_chunk_init_fails", return(NULL););

chunk->mem = buf_pool->allocator.allocate_large(mem_size,
&chunk->mem_pfx, true);
chunk->mem = buf_pool->allocator.allocate_large_dontdump(mem_size, &chunk->mem_pfx);

if (UNIV_UNLIKELY(chunk->mem == NULL)) {

Expand Down Expand Up @@ -1865,9 +1864,8 @@ buf_pool_init_instance(
&block->debug_latch));
}

buf_pool->allocator.deallocate_large(
chunk->mem, &chunk->mem_pfx, chunk->mem_size(),
true);
buf_pool->allocator.deallocate_large_dodump(
chunk->mem, &chunk->mem_pfx, chunk->mem_size());
}
ut_free(buf_pool->chunks);
buf_pool_mutex_exit(buf_pool);
Expand Down Expand Up @@ -2014,8 +2012,8 @@ buf_pool_free_instance(
ut_d(rw_lock_free(&block->debug_latch));
}

buf_pool->allocator.deallocate_large(
chunk->mem, &chunk->mem_pfx, chunk->mem_size(), true);
buf_pool->allocator.deallocate_large_dodump(
chunk->mem, &chunk->mem_pfx, chunk->mem_size());
}

for (ulint i = BUF_FLUSH_LRU; i < BUF_FLUSH_N_TYPES; ++i) {
Expand Down Expand Up @@ -2892,8 +2890,8 @@ buf_pool_resize()
&block->debug_latch));
}

buf_pool->allocator.deallocate_large(
chunk->mem, &chunk->mem_pfx, chunk->mem_size(), true);
buf_pool->allocator.deallocate_large_dodump(
chunk->mem, &chunk->mem_pfx, chunk->mem_size());

sum_freed += chunk->size;

Expand Down
36 changes: 28 additions & 8 deletions storage/innobase/include/ut0new.h
Original file line number Diff line number Diff line change
Expand Up @@ -654,13 +654,18 @@ class ut_allocator {
return(ptr);
}

pointer
allocate_large_dontdump(
size_type n_elements,
ut_new_pfx_t* pfx)
{
return allocate_large(n_elements, pfx, true);
}
/** Free a memory allocated by allocate_large() and trace the
deallocation.
@param[in,out] ptr pointer to memory to free
@param[in] pfx descriptor of the memory, as returned by
allocate_large().
@param[in] dodump if true, advise the OS to include this
memory again if a core dump occurs. */
allocate_large(). */
void
deallocate_large(
pointer ptr,
Expand All @@ -669,12 +674,8 @@ class ut_allocator {
pfx
#endif
,
size_t size,
bool dodump = false)
size_t size)
{
if (dodump) {
ut_dodump(ptr, size);
}
#ifdef UNIV_PFS_MEMORY
if (pfx) {
deallocate_trace(pfx);
Expand All @@ -684,8 +685,27 @@ class ut_allocator {
os_mem_free_large(ptr, size);
}

void
deallocate_large_dodump(
pointer ptr,
const ut_new_pfx_t*
#ifdef UNIV_PFS_MEMORY
pfx
#endif
,
size_t size)
{
ut_dodump(ptr, size);
deallocate_large(ptr,
#ifdef UNIV_PFS_MEMORY
pfx,
#else
NULL,
#endif
size);
}

#ifdef UNIV_PFS_MEMORY
/** Get the performance schema key to use for tracing allocations.
@param[in] file file name of the caller or NULL if unknown
@return performance schema key */
Expand Down

0 comments on commit a9056a2

Please sign in to comment.