[GHC] #9295: Deadlock in forkProcess
GHC
ghc-devs at haskell.org
Fri Jul 11 10:54:38 UTC 2014
#9295: Deadlock in forkProcess
------------------------------------+-------------------------------------
Reporter: edsko | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.2
Keywords: | Operating System: Unknown/Multiple
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+-------------------------------------
As part of `forkProcess` we discard all tasks except the one task that
remains. As part of this we call `freeTask`, and `freeTask` in turn calls
`closeCondition` and `closeMutex`, which are very thin wrappers around
`pthread_cond_destroy` and `phread_mutex_destroy`. However, the behaviour
of these functions is undefined when there are currently threads blocked
on these condition variables/mutexes. In reality, this undefined behaviour
often (though not always) results in a deadlock. Unfortunately, I don't
have a minimal test case to demonstrate this, but in the large system on
which I am testing this I am seeing these deadlocks rather frequently.
For the global mutex we don't attempt to call `pthread_cond_destroy` or
`pthread_mutex_destroy`, but instead re-initialize them. The patch
https://phabricator.haskell.org/D59
does precisely that for the condition variables and mutexes associated
with tasks. This is ''somewhat'' or a long way around, because we will
then subsequently still call `pthread_..._destroy`, but it means that we
don't have to mess with `freeTask`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9295>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list