mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01:00
mem0dbg.h, mem0dbg.c:
Put back mem_print_info() functions that are used to analyze memory leaks; Marko removed them by accident in his Feb 20th, 2004 patch; these functions are very important for debugging, and should always be kept in the source code base innobase/mem/mem0dbg.c: Put back mem_print_info() functions that are used to analyze memory leaks; Marko removed them by accident in his Feb 20th, 2004 patch; these functions are very important for debugging, and should always be kept in the source code base innobase/include/mem0dbg.h: Put back mem_print_info() functions that are used to analyze memory leaks; Marko removed them by accident in his Feb 20th, 2004 patch; these functions are very important for debugging, and should always be kept in the source code base
This commit is contained in:
parent
1ebf24b957
commit
6646140f39
2 changed files with 138 additions and 0 deletions
|
@ -116,4 +116,17 @@ void
|
|||
mem_analyze_corruption(
|
||||
/*===================*/
|
||||
byte* ptr); /* in: pointer to place of possible corruption */
|
||||
/*********************************************************************
|
||||
Prints information of dynamic memory usage and currently allocated memory
|
||||
heaps or buffers. Can only be used in the debug version. */
|
||||
|
||||
void
|
||||
mem_print_info(void);
|
||||
/*================*/
|
||||
/*********************************************************************
|
||||
Prints information of dynamic memory usage and currently allocated memory
|
||||
heaps or buffers since the last ..._print_info or..._print_new_info. */
|
||||
|
||||
void
|
||||
mem_print_new_info(void);
|
||||
/*====================*/
|
||||
|
|
|
@ -797,3 +797,128 @@ mem_analyze_corruption(
|
|||
dist++;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
Prints information of dynamic memory usage and currently allocated
|
||||
memory heaps or buffers. Can only be used in the debug version. */
|
||||
static
|
||||
void
|
||||
mem_print_info_low(
|
||||
/*===============*/
|
||||
ibool print_all) /* in: if TRUE, all heaps are printed,
|
||||
else only the heaps allocated after the
|
||||
previous call of this function */
|
||||
{
|
||||
#ifdef UNIV_MEM_DEBUG
|
||||
mem_hash_node_t* node;
|
||||
ulint n_heaps = 0;
|
||||
ulint allocated_mem;
|
||||
ulint ph_size;
|
||||
ulint total_allocated_mem = 0;
|
||||
ibool error;
|
||||
ulint n_blocks;
|
||||
#endif
|
||||
FILE* outfile;
|
||||
|
||||
/* outfile = fopen("ibdebug", "a"); */
|
||||
|
||||
outfile = stdout;
|
||||
|
||||
fprintf(outfile, "\n");
|
||||
fprintf(outfile,
|
||||
"________________________________________________________\n");
|
||||
fprintf(outfile, "MEMORY ALLOCATION INFORMATION\n\n");
|
||||
|
||||
#ifndef UNIV_MEM_DEBUG
|
||||
|
||||
UT_NOT_USED(print_all);
|
||||
|
||||
mem_pool_print_info(outfile, mem_comm_pool);
|
||||
|
||||
fprintf(outfile,
|
||||
"Sorry, non-debug version cannot give more memory info\n");
|
||||
|
||||
/* fclose(outfile); */
|
||||
|
||||
return;
|
||||
#else
|
||||
mutex_enter(&mem_hash_mutex);
|
||||
|
||||
fprintf(outfile, "LIST OF CREATED HEAPS AND ALLOCATED BUFFERS: \n\n");
|
||||
|
||||
if (!print_all) {
|
||||
fprintf(outfile, "AFTER THE LAST PRINT INFO\n");
|
||||
}
|
||||
|
||||
node = UT_LIST_GET_FIRST(mem_all_list_base);
|
||||
|
||||
while (node != NULL) {
|
||||
n_heaps++;
|
||||
|
||||
if (!print_all && node->nth_heap < mem_last_print_info) {
|
||||
|
||||
goto next_heap;
|
||||
}
|
||||
|
||||
mem_heap_validate_or_print(node->heap, NULL,
|
||||
FALSE, &error, &allocated_mem,
|
||||
&ph_size, &n_blocks);
|
||||
total_allocated_mem += allocated_mem;
|
||||
|
||||
fprintf(outfile,
|
||||
"%lu: file %s line %lu of size %lu phys.size %lu with %lu blocks, type %lu\n",
|
||||
node->nth_heap, node->file_name, node->line,
|
||||
allocated_mem, ph_size, n_blocks,
|
||||
(node->heap)->type);
|
||||
next_heap:
|
||||
node = UT_LIST_GET_NEXT(all_list, node);
|
||||
}
|
||||
|
||||
fprintf(outfile, "\n");
|
||||
|
||||
fprintf(outfile, "Current allocated memory : %lu\n",
|
||||
mem_current_allocated_memory);
|
||||
fprintf(outfile, "Current allocated heaps and buffers : %lu\n",
|
||||
n_heaps);
|
||||
fprintf(outfile, "Cumulative allocated memory : %lu\n",
|
||||
mem_total_allocated_memory);
|
||||
fprintf(outfile, "Maximum allocated memory : %lu\n",
|
||||
mem_max_allocated_memory);
|
||||
fprintf(outfile, "Cumulative created heaps and buffers : %lu\n",
|
||||
mem_n_created_heaps);
|
||||
fprintf(outfile, "Cumulative number of allocations : %lu\n",
|
||||
mem_n_allocations);
|
||||
|
||||
mem_last_print_info = mem_n_created_heaps;
|
||||
|
||||
mutex_exit(&mem_hash_mutex);
|
||||
|
||||
mem_pool_print_info(outfile, mem_comm_pool);
|
||||
|
||||
/* mem_validate(); */
|
||||
|
||||
/* fclose(outfile); */
|
||||
#endif
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
Prints information of dynamic memory usage and currently allocated memory
|
||||
heaps or buffers. Can only be used in the debug version. */
|
||||
|
||||
void
|
||||
mem_print_info(void)
|
||||
/*================*/
|
||||
{
|
||||
mem_print_info_low(TRUE);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
Prints information of dynamic memory usage and currently allocated memory
|
||||
heaps or buffers since the last ..._print_info or..._print_new_info. */
|
||||
|
||||
void
|
||||
mem_print_new_info(void)
|
||||
/*====================*/
|
||||
{
|
||||
mem_print_info_low(FALSE);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue