[GHC] #7719: System.Timeout.timeout may leak <<timeout>> exceptions
GHC
cvs-ghc at haskell.org
Tue Feb 26 00:43:11 CET 2013
#7719: System.Timeout.timeout may leak <<timeout>> exceptions
-------------------------+--------------------------------------------------
Reporter: int-e | Owner:
Type: bug | Status: new
Priority: normal | Component: libraries/base
Version: 7.7 | Keywords:
Os: Linux | Architecture: x86_64 (amd64)
Failure: None/Unknown | Blockedby:
Blocking: | Related:
-------------------------+--------------------------------------------------
Comment(by int-e):
A possible scenario for two nested threads on a single capability is the
following, based on the fact that {{{threadDelay}}} masks exceptions while
using {{{takeMVar}}} to wait for a timeout.
{{{
A = timeout n (timeout m (return ())
M = TimerManager
Ti = timer threads
A: outer timeout ... set up T1
A: inner timeout ... set up T2
A: threadDelay (insert into M's queue, block on MVar)
T1: threadDelay (insert into M's queue, block on MVar)
T2: threadDelay (insert into M's queue, block on MVar)
M: process queue, performing the takeMVar for A,
T1, T2
A: killThread T2 ... blocks, because T2 is now ready to run and has
exceptions blocked!
T1: throws TimeOut to A, which succeeds.
T2: throws TimeOut to A, which is enqueued.
A: catches T1 in the inner timeout, re-raises T1 to the outer timeout,
completes the call.
A: Now catches the pending TimeOut from T2.
}}}
(Examples using multiple capabilities running in parallel are easier to
construct.)
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7719#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list