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.
// 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);
}
/* ----------------------------------------------------------------------------