X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FRtsStartup.c;h=85b1c020fb0f31ac14ba5c7ee121f56ca5a79541;hp=824ef98101bd098e04b62ffa1d0a9f895302a972;hb=4cc37e5758909aaec9ede20604ec4f01c04b54ea;hpb=80a766fdb6864eae613962e43ad9eb371e0ce80c diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 824ef98..85b1c02 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -138,7 +138,13 @@ hs_init(int *argc, char **argv[]) return; } - /* The very first thing we do is grab the start time...just in case we're +#if defined(DEBUG) + /* Start off by initialising the allocator debugging so we can + * use it anywhere */ + initAllocator(); +#endif + + /* Next we do is grab the start time...just in case we're * collecting timing statistics. */ stat_startInit(); @@ -249,10 +255,12 @@ hs_init(int *argc, char **argv[]) initStats(); #if defined(RTS_USER_SIGNALS) - /* Initialise the user signal handler set */ - initUserSignals(); - /* Set up handler to run on SIGINT, etc. */ - initDefaultHandlers(); + if (RtsFlags.MiscFlags.install_signal_handlers) { + /* Initialise the user signal handler set */ + initUserSignals(); + /* Set up handler to run on SIGINT, etc. */ + initDefaultHandlers(); + } #endif #if defined(mingw32_HOST_OS) && !defined(THREADED_RTS) @@ -372,6 +380,12 @@ hs_exit(void) /* start timing the shutdown */ stat_startExit(); +#if defined(RTS_USER_SIGNALS) + if (RtsFlags.MiscFlags.install_signal_handlers) { + freeSignalHandlers(); + } +#endif + #if defined(THREADED_RTS) ioManagerDie(); #endif @@ -387,7 +401,7 @@ hs_exit(void) /* stop the ticker */ stopTimer(); - + /* reset the standard file descriptors to blocking mode */ resetNonBlockingFd(0); resetNonBlockingFd(1); @@ -432,12 +446,24 @@ hs_exit(void) // also outputs the stats (+RTS -s) info. exitStorage(); + /* free the tasks */ + freeScheduler(); + /* free shared Typeable store */ exitTypeableStore(); - /* initialise the stable pointer table */ + /* free the stable pointer table */ exitStablePtrTable(); +#if defined(PROFILING) || defined(DEBUG) + freeProfiling1(); +#endif + +#if defined(DEBUG) + /* free the thread label table */ + freeThreadLabelTable(); +#endif + /* free hash table storage */ exitHashTable(); @@ -470,8 +496,14 @@ hs_exit(void) shutdownAsyncIO(); #endif - // Finally, free all our storage. + // Finally, free all our storage freeStorage(); + +#if defined(DEBUG) + /* and shut down the allocator debugging */ + shutdownAllocator(); +#endif + } // Compatibility interfaces