[GHC] #7970: Thread GC frees roots before thread actually finishes
GHC
ghc-devs at haskell.org
Thu Jun 27 06:40:20 CEST 2013
#7970: Thread GC frees roots before thread actually finishes
---------------------------------+------------------------------------------
Reporter: joeyadams | Owner: simonmar
Type: bug | Status: new
Priority: high | Milestone: 7.8.1
Component: Runtime System | Version: 7.6.3
Keywords: | Os: Unknown/Multiple
Architecture: Unknown/Multiple | Failure: Runtime crash
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: 7170 |
---------------------------------+------------------------------------------
Comment(by joeyadams):
Replying to [comment:1 simonmar]:
> This is technically not a bug - the thread is unreachable when it is
deadlocked, and so is the weak pointer.
It only makes sense to call a thread "unreachable" if it will never run
again. But when the RTS detects an unreachable thread and prods it with
`NonTermination`, the thread continues running and accessing its local
variables, meaning it should be considered reachable again.
Here are some valid solutions, based on my understanding:
1. Treat a thread as reachable until it actually finishes or dies.
Downside: deadlocked threads would no longer be GCed.
2. Don't throw `BlockedIndefinitelyOnMVar`, `NonTermination`, etc., just
free the thread. This keeps the "unreachable" interpretation valid.
Downside: manually-managed resources (including those managed with
bracket) would be leaked. This is like (1), but at least allows Haskell
objects to be GCed.
3. When the RTS detects a deadlocked thread, treat it as reachable again
before making it throw an exception. This keeps the current behavior, but
seems difficult to implement.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7970#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list