diff options
Diffstat (limited to 'rts/sm/GC.c')
-rw-r--r-- | rts/sm/GC.c | 13 |
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) |