X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRtsStartup.c;h=08debc0c8c75aadfa8fd4243f78066f2c1388385;hb=3cdb0ada5aecbcbe940bacf577c02c41bc65c629;hp=147de7b857f85127aaa9933ba0a3eefceec384f9;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 147de7b..08debc0 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -27,6 +27,10 @@ #include "Linker.h" #include "ThreadLabels.h" #include "BlockAlloc.h" +#include "Trace.h" +#include "RtsTypeable.h" +#include "Stable.h" +#include "Hpc.h" #if defined(RTS_GTK_FRONTPANEL) #include "FrontPanel.h" @@ -161,6 +165,9 @@ hs_init(int *argc, char **argv[]) setProgArgv(*argc,*argv); } + /* initTracing must be after setupRtsFlags() */ + initTracing(); + #if defined(PAR) /* NB: this really must be done after processing the RTS flags */ IF_PAR_DEBUG(verbose, @@ -192,6 +199,9 @@ hs_init(int *argc, char **argv[]) /* initialise the stable pointer table */ initStablePtrTable(); + /* initialise the shared Typeable store */ + initTypeableStore(); + #if defined(DEBUG) /* initialise thread label table (tso->char*) */ initThreadLabelTable(); @@ -202,7 +212,7 @@ hs_init(int *argc, char **argv[]) #endif /* start the virtual timer 'subsystem'. */ - startTimer(TICK_MILLISECS); + startTimer(); /* Initialise the stats department */ initStats(); @@ -228,6 +238,10 @@ hs_init(int *argc, char **argv[]) x86_init_fpu(); #endif +#if defined(THREADED_RTS) && !defined(mingw32_HOST_OS) + ioManagerStart(); +#endif + /* Record initialization times */ stat_endInit(); } @@ -298,6 +312,8 @@ hs_add_root(void (*init_root)(void)) freeGroup_lock(bd); + startupHpc(); + #if defined(PROFILING) || defined(DEBUG) // This must be done after module initialisation. // ToDo: make this work in the presence of multiple hs_add_root()s. @@ -325,6 +341,10 @@ hs_exit(void) /* start timing the shutdown */ stat_startExit(); +#if defined(THREADED_RTS) && !defined(mingw32_HOST_OS) + ioManagerDie(); +#endif + /* stop all running tasks */ exitScheduler(); @@ -374,10 +394,22 @@ hs_exit(void) /* stop timing the shutdown, we're about to print stats */ stat_endExit(); + /* shutdown the hpc support (if needed) */ + exitHpc(); + // clean up things from the storage manager's point of view. // also outputs the stats (+RTS -s) info. exitStorage(); + /* free shared Typeable store */ + exitTypeableStore(); + + /* initialise the stable pointer table */ + exitStablePtrTable(); + + /* free hash table storage */ + exitHashTable(); + #ifdef RTS_GTK_FRONTPANEL if (RtsFlags.GcFlags.frontpanel) { stopFrontPanel(); @@ -441,6 +473,8 @@ shutdownHaskellAndExit(int n) static int exit_started=rtsFalse; #endif +void (*exitFn)(int) = 0; + void stg_exit(int n) { @@ -453,5 +487,7 @@ stg_exit(int n) IF_PAR_DEBUG(verbose, debugBelch("==-- stg_exit %d on [%x]...", n, mytid)); shutdownParallelSystem(n); #endif + if (exitFn) + (*exitFn)(n); exit(n); }