diff options
Diffstat (limited to 'rts/RtsStartup.c')
-rw-r--r-- | rts/RtsStartup.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index d8c2058526..39c5ef1f94 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -295,6 +295,8 @@ hs_add_root(void (*init_root)(void) STG_UNUSED) static void hs_exit_(rtsBool wait_foreign) { + nat g; + if (hs_init_count <= 0) { errorBelch("warning: too many hs_exit()s"); return; @@ -325,7 +327,9 @@ hs_exit_(rtsBool wait_foreign) exitScheduler(wait_foreign); /* run C finalizers for all active weak pointers */ - runAllCFinalizers(weak_ptr_list); + for (g = 0; g < RtsFlags.GcFlags.generations; g++) { + runAllCFinalizers(generations[g].weak_ptr_list); + } #if defined(RTS_USER_SIGNALS) if (RtsFlags.MiscFlags.install_signal_handlers) { |