From b240523ec7c29cf6bef4d51f234d386a84949852 Mon Sep 17 00:00:00 2001 From: sof Date: Thu, 6 Dec 2001 07:07:12 +0000 Subject: [PATCH] [project @ 2001-12-06 07:07:12 by sof] startupHaskell: if invoked more than once, do run initModules() each time, as there might be more than one 'root module'. --- ghc/rts/RtsStartup.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/ghc/rts/RtsStartup.c b/ghc/rts/RtsStartup.c index 51b1ec9..ce133dc 100644 --- a/ghc/rts/RtsStartup.c +++ b/ghc/rts/RtsStartup.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: RtsStartup.c,v 1.58 2001/11/27 01:51:23 sof Exp $ + * $Id: RtsStartup.c,v 1.59 2001/12/06 07:07:12 sof Exp $ * * (c) The GHC Team, 1998-2000 * @@ -86,10 +86,15 @@ void startupHaskell(int argc, char *argv[], void (*init_root)(void)) { /* To avoid repeated initialisations of the RTS */ - if (rts_has_started_up) - return; - else - rts_has_started_up=1; + if (rts_has_started_up) { + /* RTS is up and running, so only run the per-module initialisation code */ + if (init_root) { + initModules(init_root); + } + return; + } else { + rts_has_started_up=1; + } /* The very first thing we do is grab the start time...just in case we're * collecting timing statistics. @@ -233,7 +238,7 @@ initModules ( void (*init_root)(void) ) #endif init_sp = 0; - bd = allocGroup(4); + bd = allocGroup(INIT_STACK_BLOCKS); init_stack = (F_ *)bd->start; init_stack[init_sp++] = (F_)stg_init_ret; init_stack[init_sp++] = (F_)__stginit_Prelude; -- 1.7.10.4