Merge branch 'master' into atomics
[ghc.git] / rts / sm / GC.c
index ddb5384..8bbdda2 100644 (file)
@@ -47,6 +47,7 @@
 #include "RaiseAsync.h"
 #include "Papi.h"
 #include "Stable.h"
+#include "CheckUnload.h"
 
 #include <string.h> // for memset()
 #include <unistd.h>
@@ -661,6 +662,10 @@ GarbageCollect (nat collect_gen,
 
   resetNurseries();
 
+  if (major_gc) {
+      checkUnload (gct->scavenged_static_objects);
+  }
+
  // mark the garbage collected CAFs as dead
 #if 0 && defined(DEBUG) // doesn't work at the moment
   if (major_gc) { gcCAFs(); }
@@ -699,7 +704,7 @@ GarbageCollect (nat collect_gen,
   // Start any pending finalizers.  Must be after
   // updateStableTables() and stableUnlock() (see #4221).
   RELEASE_SM_LOCK;
-  scheduleFinalizers(cap, old_weak_ptr_list);
+  scheduleFinalizers(cap, dead_weak_ptr_list);
   ACQUIRE_SM_LOCK;
 
   // check sanity after GC
@@ -919,7 +924,7 @@ static StgWord
 inc_running (void)
 {
     StgWord new;
-    new = atomic_inc(&gc_running_threads);
+    new = atomic_inc(&gc_running_threads, 1);
     ASSERT(new <= n_gc_threads);
     return new;
 }