Commit afdbaf48 authored by Simon Marlow's avatar Simon Marlow

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.
parent c9c54304
......@@ -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);
}
/* ----------------------------------------------------------------------------
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment