diff options
author | Simon Marlow <marlowsd@gmail.com> | 2017-01-26 18:13:43 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-01-26 18:13:57 -0500 |
commit | 2ffcdfadaa53c9bc4b24606dc2e28a356a60d21e (patch) | |
tree | a81db7754a666ff43122cc1882a7925bc63829d1 | |
parent | 4e63e859d98a612e04887099ab97bce09b3db25f (diff) | |
download | haskell-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
-rw-r--r-- | rts/RtsStartup.c | 6 |
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(); |