use synchronised version of freeChain() in scavenge_mutable_list()
authorsimonmar@microsoft.com <unknown>
Thu, 13 Dec 2007 16:45:25 +0000 (16:45 +0000)
committersimonmar@microsoft.com <unknown>
Thu, 13 Dec 2007 16:45:25 +0000 (16:45 +0000)
rts/sm/GCUtils.c
rts/sm/GCUtils.h
rts/sm/Scav.c

index a8f0099..103430a 100644 (file)
@@ -33,6 +33,14 @@ allocBlock_sync(void)
     return bd;
 }
 
+void
+freeChain_sync(bdescr *bd)
+{
+    ACQUIRE_SPIN_LOCK(&gc_alloc_block_sync);
+    freeChain(bd);
+    RELEASE_SPIN_LOCK(&gc_alloc_block_sync);
+}
+
 /* -----------------------------------------------------------------------------
    Workspace utilities
    -------------------------------------------------------------------------- */
index 57c3b0c..a121dbd 100644 (file)
@@ -18,6 +18,7 @@ extern SpinLock gc_alloc_block_sync;
 #endif
 
 bdescr *allocBlock_sync(void);
+void    freeChain_sync(bdescr *bd);
 
 void    push_scan_block      (bdescr *bd, step_workspace *ws);
 bdescr *grab_todo_block      (step_workspace *ws);
index 7ee97c9..0f06ee9 100644 (file)
@@ -1052,7 +1052,7 @@ scavenge_mutable_list(generation *gen)
     }
 
     // free the old mut_list
-    freeChain(gen->saved_mut_list);
+    freeChain_sync(gen->saved_mut_list);
     gen->saved_mut_list = NULL;
 }