catch SIGTSTP and save/restore terminal settings (#4460)
[ghc-hetmet.git] / rts / RtsStartup.c
index b0cddbd..bc169ff 100644 (file)
@@ -69,8 +69,8 @@ void exitLinker( void );      // there is no Linker.h file to include
 static int hs_init_count = 0;
 
 /* -----------------------------------------------------------------------------
-   Initialise floating point unit on x86 (currently disabled. why?)
-   (see comment in ghc/compiler/nativeGen/MachInstrs.lhs).
+   Initialise floating point unit on x86 (currently disabled; See Note
+   [x86 Floating point precision] in compiler/nativeGen/X86/Instr.hs)
    -------------------------------------------------------------------------- */
 
 #define X86_INIT_FPU 0
@@ -119,12 +119,6 @@ hs_init(int *argc, char **argv[])
      */
     stat_startInit();
 
-#if defined(DEBUG)
-    /* Start off by initialising the allocator debugging so we can
-     * use it anywhere */
-    initAllocator();
-#endif
-
     /* Set the RTS flags to default values. */
 
     initRtsFlagsDefaults();
@@ -450,13 +444,11 @@ hs_exit_(rtsBool wait_foreign)
     /* free hash table storage */
     exitHashTable();
 
-    // Finally, free all our storage
-    freeStorage();
-
-#if defined(DEBUG)
-    /* and shut down the allocator debugging */
-    shutdownAllocator();
-#endif
+    // Finally, free all our storage.  However, we only free the heap
+    // memory if we have waited for foreign calls to complete;
+    // otherwise a foreign call in progress may still be referencing
+    // heap memory (e.g. by being passed a ByteArray#).
+    freeStorage(wait_foreign);
 
 }