From afdbaf48894b74eee5b6cc5c17c477d9e517f389 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 31 Aug 2006 08:57:28 +0000 Subject: [PATCH] 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. --- rts/Capability.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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); } /* ---------------------------------------------------------------------------- -- 1.7.10.4