/* -----------------------------------------------------------------------------
- * $Id: RtsStartup.c,v 1.14 1999/06/29 13:04:40 panne Exp $
+ * $Id: RtsStartup.c,v 1.17 1999/07/06 15:33:23 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
end_init();
}
+/*
+ * Shutting down the RTS - two ways of doing this, one which
+ * calls exit(), one that doesn't.
+ *
+ * (shutdownHaskellAndExit() is called by System.exitWith).
+ */
+void
+shutdownHaskellAndExit(int n)
+{
+ OnExitHook();
+ shutdownHaskell();
+ stg_exit(n);
+}
+
void
shutdownHaskell(void)
{
if (RtsFlags.TickyFlags.showTickyStats) PrintTickyInfo();
#endif
- /*
- This fflush is important, because: if "main" just returns,
- then we will end up in pre-supplied exit code that will close
- streams and flush buffers. In particular we have seen: it
- will close fd 0 (stdin), then flush fd 1 (stdout), then <who
- cares>...
-
- But if you're playing with sockets, that "close fd 0" might
- suggest to the daemon that all is over, only to be presented
- with more stuff on "fd 1" at the flush.
-
- The fflush avoids this sad possibility.
- */
- fflush(stdout);
-
rts_has_started_up=0;
}
/*
- * called from STG-land to exit the program cleanly
+ * called from STG-land to exit the program
*/
void
#ifdef PAR
par_exit(n);
#else
- OnExitHook();
exit(n);
#endif
}
+