summaryrefslogtreecommitdiff
path: root/rts/Schedule.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-11-03 16:05:47 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-11-03 16:05:47 +0000
commit3501ac6af749ada0afcaf84f112ab2e4bf9120b9 (patch)
tree2afe6473e18531985cd92d872b45f4267c6158cb /rts/Schedule.c
parent7068f60cc7aefef514f02d5927d5abbdcd5c94d4 (diff)
downloadhaskell-3501ac6af749ada0afcaf84f112ab2e4bf9120b9.tar.gz
Fix #1185 (RTS part, also needs corresponding change to libraries/base)
GHC.Conc.ensureIOManagerIsRunning now creates an IO manager thread if one does not exist or has died/exited. Unfortunately this exposed a problem caused by the fact that we have two base packages, and hence two IO managers, in GHCi: see NOTE [io-manager-ghci] in rts/Linker.c. The workaround can go away if/when we switch to a dynamically linked GHCi.
Diffstat (limited to 'rts/Schedule.c')
-rw-r--r--rts/Schedule.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/rts/Schedule.c b/rts/Schedule.c
index 539e006fa6..998d8465a7 100644
--- a/rts/Schedule.c
+++ b/rts/Schedule.c
@@ -1683,6 +1683,10 @@ forkProcess(HsStablePtr *entry
initTimer();
startTimer();
+#if defined(THREADED_RTS)
+ cap = ioManagerStartCap(cap);
+#endif
+
cap = rts_evalStableIO(cap, entry, NULL); // run the action
rts_checkSchedStatus("forkProcess",cap);