X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRtsStartup.c;h=2deb3d8e670a36e5daca7f349cb544dc5d7a525b;hb=afdbaf48894b74eee5b6cc5c17c477d9e517f389;hp=71978007f3e1d22ca774f515f82fcfaefad352d3;hpb=7a1f8fbdbab99465793c50bd9fb376c950e7e9d7;p=ghc-hetmet.git diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 7197800..2deb3d8 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -27,6 +27,8 @@ #include "Linker.h" #include "ThreadLabels.h" #include "BlockAlloc.h" +#include "Trace.h" +#include "RtsTypeable.h" #if defined(RTS_GTK_FRONTPANEL) #include "FrontPanel.h" @@ -161,6 +163,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 +197,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(); @@ -386,6 +394,15 @@ hs_exit(void) // 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(); @@ -449,6 +466,8 @@ shutdownHaskellAndExit(int n) static int exit_started=rtsFalse; #endif +void (*exitFn)(int) = 0; + void stg_exit(int n) { @@ -461,5 +480,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); }