diff options
author | Simon Marlow <marlowsd@gmail.com> | 2010-01-22 14:36:58 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2010-01-22 14:36:58 +0000 |
commit | 849ce0c790ae8eeb636c722149993e7fb9766c9d (patch) | |
tree | 97cd83d192e9846fc06c7a72d831bcf6971d9998 | |
parent | 2bc65a500cf6fde3de37f06356b4be29aff31004 (diff) | |
download | haskell-849ce0c790ae8eeb636c722149993e7fb9766c9d.tar.gz |
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.
-rw-r--r-- | rts/Prelude.h | 2 | ||||
-rw-r--r-- | rts/RtsStartup.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/rts/Prelude.h b/rts/Prelude.h index ecb5f85e56..cbe7e3ec00 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 6a01e85a1f..f0b2598734 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(); |