remove empty dir
[ghc-hetmet.git] / ghc / rts / RtsStartup.c
index 3eb116b..147de7b 100644 (file)
@@ -17,6 +17,7 @@
 #include "Stats.h"      /* initStats */
 #include "STM.h"        /* initSTM */
 #include "Signals.h"
+#include "RtsSignals.h"
 #include "Timer.h"      /* startTimer, stopTimer */
 #include "Weak.h"
 #include "Ticky.h"
@@ -217,8 +218,6 @@ hs_init(int *argc, char **argv[])
     startupAsyncIO();
 #endif
 
-    initSTM();
-
 #ifdef RTS_GTK_FRONTPANEL
     if (RtsFlags.GcFlags.frontpanel) {
        initFrontPanel();
@@ -277,12 +276,8 @@ void
 hs_add_root(void (*init_root)(void))
 {
     bdescr *bd;
-#ifdef SMP
-    Capability cap;
-#else
-#define cap MainCapability
-#endif
     nat init_sp;
+    Capability *cap = &MainCapability;
 
     if (hs_init_count <= 0) {
        barf("hs_add_root() must be called after hs_init()");
@@ -291,17 +286,17 @@ hs_add_root(void (*init_root)(void))
     /* The initialisation stack grows downward, with sp pointing 
        to the last occupied word */
     init_sp = INIT_STACK_BLOCKS*BLOCK_SIZE_W;
-    bd = allocGroup(INIT_STACK_BLOCKS);
+    bd = allocGroup_lock(INIT_STACK_BLOCKS);
     init_stack = (F_ *)bd->start;
     init_stack[--init_sp] = (F_)stg_init_finish;
     if (init_root != NULL) {
        init_stack[--init_sp] = (F_)init_root;
     }
     
-    cap.r.rSp = (P_)(init_stack + init_sp);
-    StgRun((StgFunPtr)stg_init, &cap.r);
+    cap->r.rSp = (P_)(init_stack + init_sp);
+    StgRun((StgFunPtr)stg_init, &cap->r);
 
-    freeGroup(bd);
+    freeGroup_lock(bd);
 
 #if defined(PROFILING) || defined(DEBUG)
     // This must be done after module initialisation.
@@ -318,7 +313,8 @@ void
 hs_exit(void)
 {
     if (hs_init_count <= 0) {
-       barf("too many hs_exit()s");
+       errorBelch("warning: too many hs_exit()s");
+       return;
     }
     hs_init_count--;
     if (hs_init_count > 0) {
@@ -378,9 +374,8 @@ hs_exit(void)
     /* stop timing the shutdown, we're about to print stats */
     stat_endExit();
     
-    /* clean up things from the storage manager's point of view.
-     * also outputs the stats (+RTS -s) info.
-     */
+    // clean up things from the storage manager's point of view.
+    // also outputs the stats (+RTS -s) info.
     exitStorage();
     
 #ifdef RTS_GTK_FRONTPANEL
@@ -403,7 +398,7 @@ hs_exit(void)
     // during endProfiling().
     fclose(prof_file);
 #endif
-    
+
 #if defined(TICKY_TICKY)
     if (RtsFlags.TickyFlags.showTickyStats) PrintTickyInfo();
 #endif
@@ -411,6 +406,9 @@ hs_exit(void)
 #if defined(mingw32_HOST_OS)
     shutdownAsyncIO();
 #endif
+
+    // Finally, free all our storage.
+    freeStorage();
 }
 
 // Compatibility interfaces