summaryrefslogtreecommitdiff
path: root/rts/RtsStartup.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2008-05-29 11:10:23 +0000
committerSimon Marlow <marlowsd@gmail.com>2008-05-29 11:10:23 +0000
commit9367b24fde0c3f5efa5934e69571f5834ed43548 (patch)
treee02dca8632c5d924a79729daf5c3855657d89833 /rts/RtsStartup.c
parenteacbef6dc436008473b333df551937224d901092 (diff)
downloadhaskell-9367b24fde0c3f5efa5934e69571f5834ed43548.tar.gz
hs_add_root: use use rts_lock()/rts_unlock() for a bit of extra safety
Diffstat (limited to 'rts/RtsStartup.c')
-rw-r--r--rts/RtsStartup.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c
index 0ce17fe16f..774de72e38 100644
--- a/rts/RtsStartup.c
+++ b/rts/RtsStartup.c
@@ -330,7 +330,9 @@ hs_add_root(void (*init_root)(void))
{
bdescr *bd;
nat init_sp;
- Capability *cap = &MainCapability;
+ Capability *cap;
+
+ cap = rts_lock();
if (hs_init_count <= 0) {
barf("hs_add_root() must be called after hs_init()");
@@ -357,6 +359,8 @@ hs_add_root(void (*init_root)(void))
// ToDo: make this work in the presence of multiple hs_add_root()s.
initProfiling2();
+ rts_unlock(cap);
+
// ditto.
#if defined(THREADED_RTS)
ioManagerStart();