From: sof Date: Thu, 6 Dec 2001 07:07:12 +0000 (+0000) Subject: [project @ 2001-12-06 07:07:12 by sof] X-Git-Tag: Approximately_9120_patches~457 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=b240523ec7c29cf6bef4d51f234d386a84949852;p=ghc-hetmet.git [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'. --- 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;