[GHC] #9292: Race condition when multiple threads wait for a process

GHC ghc-devs at haskell.org
Thu Jul 10 16:17:14 UTC 2014


#9292: Race condition when multiple threads wait for a process
-------------------------------------+-------------------------------------
       Reporter:  snoyberg           |             Owner:
           Type:  bug                |            Status:  new
       Priority:  normal             |         Milestone:
      Component:  libraries/process  |           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:                     |
-------------------------------------+-------------------------------------
 Consider the following code:


 {{{
 import System.Process
 import Control.Concurrent.Async

 main :: IO ()
 main = do
     (_, _, _, ph) <- createProcess $ shell "sleep 1"
     let helper i = do
             ec <- waitForProcess ph
             print (i :: Int, ec)
     ((), ()) <- concurrently (helper 1) (helper 2)
     return ()
 }}}

 If I compile with the single threaded runtime, I get the output

 {{{
 (2,ExitSuccess)
 (1,ExitSuccess)
 }}}

 But when compiling with the multithreaded runtime, I get:

 {{{
 bin: waitForProcess: does not exist (No child processes)
 }}}

 If you need to wait for a process from multiple threads, you can do so now
 by having a dedicated wait thread which writes to an MVar or TMVar, but
 the current default behavior can be surprising.

 I discussed this in a [http://www.yesodweb.com/blog/2014/07/rfc-new-data-
 conduit-process blog post], and there was some
 [http://www.reddit.com/r/haskell/comments/2abmwu/rfc_new_dataconduitprocess/cithh69
 conversation on Reddit].

 At the least, I think we need better documentation, but if there's a
 better solution, that would be best.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9292>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list