From: Simon Marlow Date: Tue, 9 Mar 2010 09:58:31 +0000 (+0000) Subject: Fix a rare deadlock when the IO manager thread is slow to start up X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=f8a01fb39f3756bec409c9b752fd4f8088e130bf;p=ghc-hetmet.git Fix a rare deadlock when the IO manager thread is slow to start up This fixes occasional failures of ffi002(threaded1) on a loaded machine. --- diff --git a/rts/Capability.c b/rts/Capability.c index c37ec4e..cf85372 100644 --- a/rts/Capability.c +++ b/rts/Capability.c @@ -786,10 +786,18 @@ shutdownCapability (Capability *cap, Task *task, rtsBool safe) "thread(s) are involved in foreign calls, yielding"); cap->running_task = NULL; RELEASE_LOCK(&cap->lock); + // The IO manager thread might have been slow to start up, + // so the first attempt to kill it might not have + // succeeded. Just in case, try again - the kill message + // will only be sent once. + // + // To reproduce this deadlock: run ffi002(threaded1) + // repeatedly on a loaded machine. + ioManagerDie(); yieldThread(); continue; } - + traceEventShutdown(cap); RELEASE_LOCK(&cap->lock); break;