Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
set size to -1 for free fragments in new fragmented block
[simgrid.git] / src / xbt / mmalloc / mfree.c
index b264ec3..e8242f6 100644 (file)
@@ -40,6 +40,7 @@ void mfree(struct mdesc *mdp, void *ptr)
 
   switch (type) {
   case -1: /* Already free */
+    UNLOCK(mdp);
     THROWF(system_error, 0, "Asked to free a fragment in a block that is already free. I'm puzzled\n");
     break;
     
@@ -149,13 +150,15 @@ void mfree(struct mdesc *mdp, void *ptr)
       ((char *) ADDRESS(block) +
        (mdp->heapinfo[block].busy_frag.first << type));
 
-    /* Set size used in the fragment to 0 */
     frag_nb = RESIDUAL(ptr, BLOCKSIZE) >> type;
 
-    if( mdp->heapinfo[block].busy_frag.frag_size[frag_nb] == 0)
+    if( mdp->heapinfo[block].busy_frag.frag_size[frag_nb] == -1){
+      UNLOCK(mdp);
       THROWF(system_error, 0, "Asked to free a fragment that is already free. I'm puzzled\n");
+    }
 
-    mdp->heapinfo[block].busy_frag.frag_size[frag_nb] = 0;
+    /* Set size used in the fragment to -1 */
+    mdp->heapinfo[block].busy_frag.frag_size[frag_nb] = -1;
 
     if (mdp->heapinfo[block].busy_frag.nfree ==
         (BLOCKSIZE >> type) - 1) {