X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FMain.c;h=83fb11527f12a6831bad747aa540b8813cbdf064;hb=fb7a723bfd7650a705cb226e07c5b08b7a8e9279;hp=c3717648d34ce61f20de88e35af080d64bd0ec5e;hpb=8db3e8067b4559cd87930791cdbeffaa2673658f;p=ghc-hetmet.git diff --git a/ghc/rts/Main.c b/ghc/rts/Main.c index c371764..83fb115 100644 --- a/ghc/rts/Main.c +++ b/ghc/rts/Main.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Main.c,v 1.26 2001/02/09 12:40:22 simonmar Exp $ + * $Id: Main.c,v 1.31 2001/09/04 18:29:21 ken Exp $ * * (c) The GHC Team 1998-2000 * @@ -9,6 +9,7 @@ #define COMPILING_RTS_MAIN +#include "PosixSource.h" #include "Rts.h" #include "RtsAPI.h" #include "SchedAPI.h" @@ -25,8 +26,8 @@ #endif #ifdef PAR -# include "ParInit.h" # include "Parallel.h" +# include "ParallelRts.h" # include "LLC.h" #endif @@ -38,7 +39,7 @@ # include #endif -extern void __init_PrelMain(void); +extern void __stginit_PrelMain(void); /* Hack: we assume that we're building a batch-mode system unless * INTERPRETER is set @@ -50,7 +51,7 @@ int main(int argc, char *argv[]) SchedulerStatus status; /* all GranSim/GUM init is done in startupHaskell; sets IAmMainThread! */ - startupHaskell(argc,argv,__init_PrelMain); + startupHaskell(argc,argv,__stginit_PrelMain); /* kick off the computation by creating the main thread with a pointer to mainIO_closure representing the computation of the overall program; @@ -78,7 +79,8 @@ int main(int argc, char *argv[]) # endif if (IAmMainThread == rtsTrue) { - fprintf(stderr, "Main Thread Started ...\n"); + IF_PAR_DEBUG(verbose, + fprintf(stderr, "==== [%x] Main Thread Started ...\n", mytid)); /* ToDo: Dump event for the main thread */ status = rts_evalIO((HaskellObj)mainIO_closure, NULL); @@ -89,7 +91,8 @@ int main(int argc, char *argv[]) mytid)); /* all non-main threads enter the scheduler without work */ - status = rts_evalNothing((StgClosure*)NULL); + taskStart(); + status = Success; // declare victory (see shutdownParallelSystem) } # elif defined(GRAN) @@ -104,7 +107,6 @@ int main(int argc, char *argv[]) # endif /* !PAR && !GRAN */ - // ToDo: update for parallel execution /* check the status of the entire Haskell computation */ switch (status) { case Deadlock: @@ -122,6 +124,12 @@ int main(int argc, char *argv[]) case Success: exit_status = EXIT_SUCCESS; break; +#if defined(PAR) + case NoStatus: + prog_belch("main thread PE killed; probably due to failure of another PE; check /tmp/pvml..."); + exit_status = EXIT_KILLED; + break; +#endif default: barf("main thread completed with invalid status"); }