/* -----------------------------------------------------------------------------
- * $Id: RtsStartup.c,v 1.11 1999/05/04 10:19:19 sof Exp $
+ * $Id: RtsStartup.c,v 1.15 1999/07/02 09:31:54 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
*/
struct RTS_FLAGS RtsFlags;
-extern void startupHaskell(int argc, char *argv[])
+static int rts_has_started_up = 0;
+
+void
+startupHaskell(int argc, char *argv[])
{
- static int rts_has_started_up = 0;
+#ifdef ENABLE_WIN32_DLL_SUPPORT
int i;
+#endif
/* To avoid repeated initialisations of the RTS */
if (rts_has_started_up)
prog_argc = argc;
prog_argv = argv;
-#if defined(PAR)
+#ifdef PAR
/* Initialise the parallel system -- before initHeap! */
initParallelSystem();
/* And start GranSim profiling if required: omitted for now
filling in the tables with references to where the
static info tables have been loaded inside the running
process.
-
- Ditto for Bool closure tbl.
*/
#ifdef ENABLE_WIN32_DLL_SUPPORT
for(i=0;i<=255;i++)
void
shutdownHaskell(void)
{
+ if (!rts_has_started_up)
+ return;
+
/* Finalize any remaining weak pointers */
finalizeWeakPointersNow();
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;
}