X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FMain.c;h=5f16fa344ab730686095fb663af40cdeeb5c517c;hb=d4050431de1adddedb240e497f77f89301f77070;hp=5a1ab109277582848c4e0599159bc946e4c6a3a0;hpb=a91cc8496bf4ea7fe1e3ad9d97836152f3939ffa;p=ghc-hetmet.git diff --git a/rts/Main.c b/rts/Main.c index 5a1ab10..5f16fa3 100644 --- a/rts/Main.c +++ b/rts/Main.c @@ -12,11 +12,11 @@ #include "Rts.h" #include "RtsAPI.h" #include "SchedAPI.h" -#include "Schedule.h" #include "RtsFlags.h" #include "RtsUtils.h" #include "Prelude.h" #include "Task.h" +#include "seh_excn.h" #include #ifdef DEBUG @@ -49,6 +49,7 @@ int main(int argc, char *argv[]) SchedulerStatus status; /* all GranSim/GUM init is done in startupHaskell; sets IAmMainThread! */ + BEGIN_CATCH startupHaskell(argc,argv,__stginit_ZCMain); /* kick off the computation by creating the main thread with a pointer @@ -102,7 +103,7 @@ int main(int argc, char *argv[]) /* ToDo: want to start with a larger stack size */ { - void *cap = rts_lock(); + Capability *cap = rts_lock(); cap = rts_evalLazyIO(cap,(HaskellObj)(void *)mainIO_closure, NULL); status = rts_getSchedStatus(cap); taskTimeStamp(myTask()); @@ -134,6 +135,8 @@ int main(int argc, char *argv[]) barf("main thread completed with invalid status"); } shutdownHaskellAndExit(exit_status); - return 0; /* never reached, keep gcc -Wall happy */ + END_CATCH + return 0; /* not reached unless a Windows exception happens, + also keeps gcc -Wall happy */ } # endif /* BATCH_MODE */