From: Simon Marlow Date: Thu, 31 Aug 2006 08:57:28 +0000 (+0000) Subject: don't closeMutex() the Capability lock X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;ds=sidebyside;h=afdbaf48894b74eee5b6cc5c17c477d9e517f389;p=ghc-hetmet.git don't closeMutex() the Capability lock There might be threads in foreign calls that will attempt to return via resumeThread() and grab this lock, so we can't safely destroy it. Fixes one cause of internal error: ASSERTION FAILED: file Capability.c, line 90 although I haven't repeated that assertion failure in the wild, only with a specially crafted test case, so I can't be sure I really got it. --- diff --git a/rts/Capability.c b/rts/Capability.c index 7fc1c57..99c68fd 100644 --- a/rts/Capability.c +++ b/rts/Capability.c @@ -678,8 +678,10 @@ shutdownCapability (Capability *cap, Task *task) // we now have the Capability, its run queue and spare workers // list are both empty. - // We end up here only in THREADED_RTS - closeMutex(&cap->lock); + // ToDo: we can't drop this mutex, because there might still be + // threads performing foreign calls that will eventually try to + // return via resumeThread() and attempt to grab cap->lock. + // closeMutex(&cap->lock); } /* ----------------------------------------------------------------------------