summaryrefslogtreecommitdiff
path: root/rts/sm/GC.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/sm/GC.c')
-rw-r--r--rts/sm/GC.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/rts/sm/GC.c b/rts/sm/GC.c
index a7b8ad3a42..8a8e1573dd 100644
--- a/rts/sm/GC.c
+++ b/rts/sm/GC.c
@@ -273,10 +273,6 @@ GarbageCollect (uint32_t collect_gen,
static_flag == STATIC_FLAG_A ? STATIC_FLAG_B : STATIC_FLAG_A;
}
- if (major_gc) {
- prepareUnloadCheck();
- }
-
#if defined(THREADED_RTS)
work_stealing = RtsFlags.ParFlags.parGcLoadBalancingEnabled &&
N >= RtsFlags.ParFlags.parGcLoadBalancingGen;
@@ -736,9 +732,7 @@ GarbageCollect (uint32_t collect_gen,
// mark the garbage collected CAFs as dead
#if defined(DEBUG)
- if (major_gc) {
- gcCAFs();
- }
+ if (major_gc) { gcCAFs(); }
#endif
// Update the stable name hash table
@@ -749,10 +743,9 @@ GarbageCollect (uint32_t collect_gen,
// hs_free_stable_ptr(), both of which access the StablePtr table.
stablePtrUnlock();
- // Unload dynamically-loaded object code after a major GC.
- // See Note [Object unloading] in CheckUnload.c for details.
+ // Must be after stablePtrUnlock(), because it might free stable ptrs.
if (major_gc) {
- checkUnload();
+ checkUnload (gct->scavenged_static_objects);
}
#if defined(PROFILING)