summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2010-01-22 14:36:58 +0000
committerSimon Marlow <marlowsd@gmail.com>2010-01-22 14:36:58 +0000
commit849ce0c790ae8eeb636c722149993e7fb9766c9d (patch)
tree97cd83d192e9846fc06c7a72d831bcf6971d9998
parent2bc65a500cf6fde3de37f06356b4be29aff31004 (diff)
downloadhaskell-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.h2
-rw-r--r--rts/RtsStartup.c9
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();