[Gc] Win32 gc leaks memory(8 to 16 bytes)

djamel magri djamel.magri at gmail.com
Thu Oct 7 08:02:17 PDT 2010


Hi, 

Env. : gc v.7.2alpha4, OS: XP, macros:
GC_NOT_DLL;ALL_INTERIOR_POINTERS;__STDC__;ENABLE_TRACE;GC_WIN32_THREADS 


Each collection leads to GC_add_current_malloc_heap() call, allocating heap
memory(pure c malloc), to distinguish malloc heap from gc heap
Some of them are never freed.

A simple program with a GC_INIT() and GC_deinit(), with GC_dont_precollect set
to 0, shows the problem.

GC_deinit only releases the critical section(by the way GC_deinit is not part of
gc.h API, it's in gc_priv.h...)


I have coded this fix :

void GC_deinit(void)
  {
	  if (GC_print_stats)
		GC_log_printf("-->GC_deinit\n");

	  if(GC_malloc_heap_l)
	  {
		  struct GC_malloc_heap_list* current = GC_malloc_heap_l;
		  struct GC_malloc_heap_list* next = 0;

		  do
		  {
			  next = current->next;
			  free(current);	
			  current = next;
		  }while(next);
		 GC_malloc_heap_l = 0;
	  }	  
	 
      if (GC_is_initialized)
	  {
  		DeleteCriticalSection(&GC_write_cs);
      }
	  if (GC_print_stats)
		GC_log_printf("<--GC_deinit\n");
  }



More information about the Gc mailing list