From: Gabriel Corona Date: Mon, 13 Oct 2014 08:08:36 +0000 (+0200) Subject: [mmalloc] Fix junkarea handling in free X-Git-Tag: v3_12~732^2~290 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/7690e1d66b06cad5dcf98ce263cdaea2909c69fe [mmalloc] Fix junkarea handling in free The call free(junkarea) was broken and was trying to delegate to mmalloc instead of using junkarea. Because of this libsimgrid broken when compiling with LLVM with mmalloc support. --- diff --git a/src/xbt/mmalloc/mfree.c b/src/xbt/mmalloc/mfree.c index 5586cf5400..373c1149f5 100644 --- a/src/xbt/mmalloc/mfree.c +++ b/src/xbt/mmalloc/mfree.c @@ -215,4 +215,3 @@ void mfree(struct mdesc *mdp, void *ptr) break; } } - diff --git a/src/xbt/mmalloc/mm_legacy.c b/src/xbt/mmalloc/mm_legacy.c index 68cd43f40c..ecf09bbbc2 100644 --- a/src/xbt/mmalloc/mm_legacy.c +++ b/src/xbt/mmalloc/mm_legacy.c @@ -141,7 +141,9 @@ void free(void *p) { if (p==NULL) return; - if (p<=(void*)junkareas || p>(void*)(junkareas[MAX_JUNK_AREAS]) ) { + if (p<(void*)junkareas || p>=(void*)(junkareas[MAX_JUNK_AREAS]) ) { + // main use case + xbt_mheap_t mdp = __mmalloc_current_heap; if (mdp) { @@ -151,10 +153,16 @@ void free(void *p) } else { real_free(p); } - } else if(allocated_junk && p==junkareas[allocated_junk-1]) { - allocated_junk--; } else { - // Leaked memory. + // We are in the junkarea. + // This area is used to allocate memory at initilization time. + + if(allocated_junk && p==junkareas[allocated_junk-1]) { + // Last junkarea. We can reuse it. + allocated_junk--; + } else { + // We currently cannot reuse freed junkareas in the general case. + } } }