projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix Haddock errors.
[ghc-hetmet.git]
/
rts
/
RtsStartup.c
diff --git
a/rts/RtsStartup.c
b/rts/RtsStartup.c
index
070275b
..
f221ad8
100644
(file)
--- a/
rts/RtsStartup.c
+++ b/
rts/RtsStartup.c
@@
-71,6
+71,9
@@
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
#if USE_PAPI
#include "Papi.h"
#if USE_PAPI
#include "Papi.h"
@@
-140,17
+143,20
@@
hs_init(int *argc, char **argv[])
return;
}
return;
}
-#if defined(DEBUG)
- /* Start off by initialising the allocator debugging so we can
- * use it anywhere */
- initAllocator();
-#endif
+ /* Initialise the stats department, phase 0 */
+ initStats0();
/* Next we do is grab the start time...just in case we're
* collecting timing statistics.
*/
stat_startInit();
/* Next we do is grab the start time...just in case we're
* collecting timing statistics.
*/
stat_startInit();
+#if defined(DEBUG)
+ /* Start off by initialising the allocator debugging so we can
+ * use it anywhere */
+ initAllocator();
+#endif
+
#ifdef PAR
/*
* The parallel system needs to be initialised and synchronised before
#ifdef PAR
/*
* The parallel system needs to be initialised and synchronised before
@@
-181,6
+187,9
@@
hs_init(int *argc, char **argv[])
setProgArgv(*argc,*argv);
}
setProgArgv(*argc,*argv);
}
+ /* Initialise the stats department, phase 1 */
+ initStats1();
+
#ifdef USE_PAPI
papi_init();
#endif
#ifdef USE_PAPI
papi_init();
#endif
@@
-235,9
+244,6
@@
hs_init(int *argc, char **argv[])
initTimer();
startTimer();
initTimer();
startTimer();
- /* Initialise the stats department */
- initStats();
-
#if defined(RTS_USER_SIGNALS)
if (RtsFlags.MiscFlags.install_signal_handlers) {
/* Initialise the user signal handler set */
#if defined(RTS_USER_SIGNALS)
if (RtsFlags.MiscFlags.install_signal_handlers) {
/* Initialise the user signal handler set */
@@
-380,6
+386,8
@@
hs_exit_(rtsBool wait_foreign)
/* start timing the shutdown */
stat_startExit();
/* start timing the shutdown */
stat_startExit();
+ OnExitHook();
+
#if defined(RTS_USER_SIGNALS)
if (RtsFlags.MiscFlags.install_signal_handlers) {
freeSignalHandlers();
#if defined(RTS_USER_SIGNALS)
if (RtsFlags.MiscFlags.install_signal_handlers) {
freeSignalHandlers();
@@
-437,6
+445,9
@@
hs_exit_(rtsBool wait_foreign)
PAR_TICKY_PAR_END();
#endif
PAR_TICKY_PAR_END();
#endif
+ // uninstall signal handlers
+ resetDefaultHandlers();
+
/* stop timing the shutdown, we're about to print stats */
stat_endExit();
/* stop timing the shutdown, we're about to print stats */
stat_endExit();
@@
-525,10
+536,10
@@
shutdownHaskell(void)
void
shutdownHaskellAndExit(int n)
{
void
shutdownHaskellAndExit(int n)
{
- if (hs_init_count == 1) {
- OnExitHook();
- hs_exit_(rtsFalse);
- // we're about to exit(), no need to wait for foreign calls to return.
+ // we're about to exit(), no need to wait for foreign calls to return.
+ hs_exit_(rtsFalse);
+
+ if (hs_init_count == 0) {
#if defined(PAR)
/* really exit (stg_exit() would call shutdownParallelSystem() again) */
exit(n);
#if defined(PAR)
/* really exit (stg_exit() would call shutdownParallelSystem() again) */
exit(n);
@@
-538,6
+549,15
@@
shutdownHaskellAndExit(int n)
}
}
}
}
+#ifndef mingw32_HOST_OS
+void
+shutdownHaskellAndSignal(int sig)
+{
+ hs_exit_(rtsFalse);
+ kill(getpid(),sig);
+}
+#endif
+
/*
* called from STG-land to exit the program
*/
/*
* called from STG-land to exit the program
*/