[GHC] #9284: shutdownCapability sometimes loops indefinitely on OSX after forkProcess

GHC ghc-devs at haskell.org
Thu Jul 10 04:36:23 UTC 2014


#9284: shutdownCapability sometimes loops indefinitely on OSX after forkProcess
-------------------------------------+------------------------------------
        Reporter:  edsko             |            Owner:
            Type:  bug               |           Status:  new
        Priority:  normal            |        Milestone:
       Component:  Compiler          |          Version:  7.8.2
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------

Comment (by AndreasVoellmy):

 I haven't yet nailed it down, but here is my current guess as to what is
 happening when it gets stuck...

 The child process's IO manager thread is blocked in the foreign call on
 kevent indefinitely (as you describe). The intention is that
 `ioManagerDie()` writes to the control pipe that the kevent is subscribed
 to, and this write will cause the kevent call to return from its foreign
 call. It seems that the RTS has a file descriptor for the write end of the
 pipe (set by the call to `c_setIOManagerControlFd` in `GHC.Event.Control`)
 and so does the event manager on the HS side. I suspect that these get out
 of sync after the fork and exec; i.e. `ioManagerDie()` writes to some file
 descriptor that no longer corresponds to the write end of the pipe that
 kevent is waiting on.

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


More information about the ghc-tickets mailing list