From 849ce0c790ae8eeb636c722149993e7fb9766c9d Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Fri, 22 Jan 2010 14:36:58 +0000 Subject: [PATCH] Add some missing getStablePtr()s for CAFs that the RTS refers to A recent patch ("Refactor CoreArity a bit") changed the arity of GHC.Conc.runSparks such that it became a CAF, and the RTS was not explicitly retaining it, which led to a crash when the CAF got GC'd. While fixing this I found a couple of other closures that the RTS refers to which weren't getting the correct CAF treatment. --- rts/Prelude.h | 2 ++ rts/RtsStartup.c | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/rts/Prelude.h b/rts/Prelude.h index ecb5f85..cbe7e3e 100644 --- a/rts/Prelude.h +++ b/rts/Prelude.h @@ -88,6 +88,8 @@ PRELUDE_INFO(base_GHCziStable_StablePtr_con_info); #define mainIO_closure (&ZCMain_main_closure) #define runSparks_closure DLL_IMPORT_DATA_REF(base_GHCziConc_runSparks_closure) +#define ensureIOManagerIsRunning_closure DLL_IMPORT_DATA_REF(base_GHCziConc_ensureIOManagerIsRunning_closure) +#define runHandlers_closure DLL_IMPORT_DATA_REF(base_GHCziConc_runHandlers_closure) #define stackOverflow_closure DLL_IMPORT_DATA_REF(base_GHCziIOziException_stackOverflow_closure) #define heapOverflow_closure DLL_IMPORT_DATA_REF(base_GHCziIOziException_heapOverflow_closure) diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 6a01e85..f0b2598 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -171,13 +171,20 @@ hs_init(int *argc, char **argv[]) */ getStablePtr((StgPtr)runIO_closure); getStablePtr((StgPtr)runNonIO_closure); + + getStablePtr((StgPtr)runFinalizerBatch_closure); + getStablePtr((StgPtr)stackOverflow_closure); getStablePtr((StgPtr)heapOverflow_closure); - getStablePtr((StgPtr)runFinalizerBatch_closure); getStablePtr((StgPtr)unpackCString_closure); getStablePtr((StgPtr)blockedIndefinitelyOnMVar_closure); getStablePtr((StgPtr)nonTermination_closure); getStablePtr((StgPtr)blockedIndefinitelyOnSTM_closure); + getStablePtr((StgPtr)nestedAtomically_closure); + + getStablePtr((StgPtr)runSparks_closure); + getStablePtr((StgPtr)ensureIOManagerIsRunning_closure); + getStablePtr((StgPtr)runHandlers_closure); /* initialise the shared Typeable store */ initGlobalStore(); -- 1.7.10.4