X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FMain.c;h=520a757037074fd743139a61e7630644dcbbb4da;hb=dd45134bcb376a8bbc982370b95b3dbeaa8dc58a;hp=6029921436b0d6a9fc1deb524c9af5076b4ac8bb;hpb=85aa72b9dc6803685595936c61f3cab6faab815a;p=ghc-hetmet.git diff --git a/ghc/rts/Main.c b/ghc/rts/Main.c index 6029921..520a757 100644 --- a/ghc/rts/Main.c +++ b/ghc/rts/Main.c @@ -1,5 +1,4 @@ /* ----------------------------------------------------------------------------- - * $Id: Main.c,v 1.40 2003/09/21 22:20:55 wolfgang Exp $ * * (c) The GHC Team 1998-2000 * @@ -17,16 +16,13 @@ #include "RtsFlags.h" #include "RtsUtils.h" #include "Prelude.h" +#include "Task.h" #include #ifdef DEBUG # include "Printer.h" /* for printing */ #endif -#ifdef INTERPRETER -# include "Assembler.h" -#endif - #ifdef PAR # include "Parallel.h" # include "ParallelRts.h" @@ -82,14 +78,14 @@ int main(int argc, char *argv[]) if (IAmMainThread == rtsTrue) { IF_PAR_DEBUG(verbose, - fprintf(stderr, "==== [%x] Main Thread Started ...\n", mytid)); + debugBelch("==== [%x] Main Thread Started ...\n", mytid)); /* ToDo: Dump event for the main thread */ status = rts_mainLazyIO((HaskellObj)mainIO_closure, NULL); } else { /* Just to show we're alive */ IF_PAR_DEBUG(verbose, - fprintf(stderr, "== [%x] Non-Main PE enters scheduler via taskStart() without work ...\n", + debugBelch("== [%x] Non-Main PE enters scheduler via taskStart() without work ...\n", mytid)); /* all non-main threads enter the scheduler without work */ @@ -105,20 +101,23 @@ int main(int argc, char *argv[]) # else /* !PAR && !GRAN */ /* ToDo: want to start with a larger stack size */ - rts_lock(); - status = rts_evalLazyIO((HaskellObj)mainIO_closure, NULL); - rts_unlock(); + { + void *cap = rts_lock(); + cap = rts_evalLazyIO(cap,(HaskellObj)mainIO_closure, NULL); + status = rts_getSchedStatus(cap); + rts_unlock(cap); + } # endif /* !PAR && !GRAN */ /* check the status of the entire Haskell computation */ switch (status) { case Killed: - prog_belch("main thread exited (uncaught exception)"); + errorBelch("main thread exited (uncaught exception)"); exit_status = EXIT_KILLED; break; case Interrupted: - prog_belch("interrupted"); + errorBelch("interrupted"); exit_status = EXIT_INTERRUPTED; break; case Success: @@ -126,7 +125,7 @@ int main(int argc, char *argv[]) break; #if defined(PAR) case NoStatus: - prog_belch("main thread PE killed; probably due to failure of another PE; check /tmp/pvml..."); + errorBelch("main thread PE killed; probably due to failure of another PE; check /tmp/pvml..."); exit_status = EXIT_KILLED; break; #endif