Commit 6646140f authored by unknown's avatar unknown
Browse files

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
parent 1ebf24b9
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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);
/*====================*/
+125 −0
Original line number Diff line number Diff line
@@ -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);
}