mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
MDEV-18946: innodb: {de|}allocate_large_{dodump|dontdump} added
In 1dc78d35a0beb9620bae1f4841cc07389b425707 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.
This commit is contained in:
parent
8678a1052d
commit
a9056a2b89
2 changed files with 35 additions and 17 deletions
|
@ -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)) {
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -2892,8 +2890,8 @@ withdraw_retry:
|
|||
&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;
|
||||
|
||||
|
|
|
@ -654,13 +654,18 @@ public:
|
|||
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,
|
||||
|
@ -669,12 +674,8 @@ public:
|
|||
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);
|
||||
|
@ -684,8 +685,27 @@ public:
|
|||
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 */
|
||||
|
|
Loading…
Reference in a new issue