summaryrefslogtreecommitdiff
path: root/rts/RtsStartup.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2017-01-26 18:13:43 -0500
committerBen Gamari <ben@smart-cactus.org>2017-01-26 18:13:57 -0500
commit2ffcdfadaa53c9bc4b24606dc2e28a356a60d21e (patch)
treea81db7754a666ff43122cc1882a7925bc63829d1 /rts/RtsStartup.c
parent4e63e859d98a612e04887099ab97bce09b3db25f (diff)
downloadhaskell-2ffcdfadaa53c9bc4b24606dc2e28a356a60d21e.tar.gz
Fatal if we try to reinitialize the RTS
This isn't supported, and fatalling with an error is better than segfaulting later. Test Plan: validate Reviewers: JonCoens, austin, erikd, niteria, bgamari Reviewed By: niteria, bgamari Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D3020
Diffstat (limited to 'rts/RtsStartup.c')
-rw-r--r--rts/RtsStartup.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c
index 98c1dd290c..9ec8af8145 100644
--- a/rts/RtsStartup.c
+++ b/rts/RtsStartup.c
@@ -62,6 +62,7 @@
// Count of how many outstanding hs_init()s there have been.
static int hs_init_count = 0;
+static bool rts_shutdown = false;
static void flushStdHandles(void);
@@ -145,6 +146,10 @@ hs_init_ghc(int *argc, char **argv[], RtsConfig rts_config)
// second and subsequent inits are ignored
return;
}
+ if (rts_shutdown) {
+ errorBelch("hs_init_ghc: reinitializing the RTS after shutdown is not currently supported");
+ stg_exit(1);
+ }
setlocale(LC_CTYPE,"");
@@ -338,6 +343,7 @@ hs_exit_(bool wait_foreign)
// ignore until it's the last one
return;
}
+ rts_shutdown = true;
/* start timing the shutdown */
stat_startExit();