
So, what should I use instead?
This is just a guess until someone who actually knows what they're talking about answers, but... In /ghc/rts/Schedule.c, there's a function: void interruptStgRts(void) { interrupted = 1; context_switch = 1; } which basically tells the rts to emit an interrupted message here: /* If we're interrupted (the user pressed ^C, or some other * termination condition occurred), kill all the currently running * threads. */ if (interrupted) { IF_DEBUG(scheduler, sched_belch("interrupted")); deleteAllThreads(); interrupted = rtsFalse; was_interrupted = rtsTrue; } My guess is that if you override the interruptStgRts function as per section 4.16.4 in the ghc users guide, you should be able to fix this problem. Simply overriding it with a function that *doesn't* set interrupted to 1 should be fine (you shouldn't need to set context_switch to 1 either). Don't kill me if this doesn't work though :) - Hal