From: Simon Marlow Date: Mon, 17 Nov 2008 09:43:50 +0000 (+0000) Subject: Another shutdown fix X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=cb90532723bd5801b8ac29973dd14e8e30b1e0a9 Another shutdown fix If we encounter a runnable thread during shutdown, just kill it. All the threads are supposed to be dead at this stage, but this catches threads that might have just returned from a foreign call, or were finalizers created by the GC. Fixes memo002(threaded1) --- diff --git a/rts/Schedule.c b/rts/Schedule.c index aedd6b7..d25a321 100644 --- a/rts/Schedule.c +++ b/rts/Schedule.c @@ -460,6 +460,15 @@ schedule (Capability *initialCapability, Task *task) } #endif + // If we're shutting down, and this thread has not yet been + // killed, kill it now. This sometimes happens when a finalizer + // thread is created by the final GC, or a thread previously + // in a foreign call returns. + if (sched_state >= SCHED_INTERRUPTING && + !(t->what_next == ThreadComplete || t->what_next == ThreadKilled)) { + deleteThread_(cap,t); + } + /* context switches are initiated by the timer signal, unless * the user specified "context switch as often as possible", with * +RTS -C0