Massive patch for the first months work adding System FC to GHC #35
[ghc-hetmet.git] / rts / RtsStartup.c
index 7197800..62a347a 100644 (file)
@@ -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();
@@ -202,7 +210,7 @@ hs_init(int *argc, char **argv[])
 #endif
 
     /* start the virtual timer 'subsystem'. */
-    startTimer(TICK_MILLISECS);
+    startTimer();
 
     /* Initialise the stats department */
     initStats();
@@ -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);
 }