[Haskell-cafe] forkProcess, forkIO, and multithreaded runtime

Mark Lentczner mark.lentczner at gmail.com
Mon Jan 21 00:15:14 CET 2013


Sorry to be reviving this thread so long after.... but I seem to be running
into similar issues as Michael S. did at the start.

In short, I'm using forkProcess with the threaded RTS, and see occasional
hangs:

   - I see these only on Linux. On Mac OS X, I never do.
   - I'm using GHC 7.4.2
   - I noticed the warning in the doc for forkProcess, but assumed I was
   safe, as I wasn't holding any shared resources at the time of the fork, and
   no shared resources in the program are used in the child.
   - WIth gdb, I've traced the hang to here in the run-time: forkProcess >
   discardTasksExcept > freeTask > closeMutex(&task->lock)
   > pthread_mutex_destroy

The discussion in this thread leaves me with these questions:

   - Is there reason to think the situation has gotten better in 7.6 and
   later?
   - Isn't the only reason *System.Process* is safer because it does an
   immediate exec in the child? Alas, I really want to just fork()sometimes.
   - Is it really true that even if my program has no shared resources with
   the child, that the IO subsystem and FFI system do anyway? Surely the RTS
   would take care of doing the right thing with those, no?
   - There should be no concern with exec w.r.t. library invariants since
   exec is wholesale replacement - all the libraries will reinitialize. Is
   there a problem here I'm missing?

Alas, I've stopped using the threaded RTS until I understand this better.

- Mark
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130120/bc449211/attachment.htm>


More information about the Haskell-Cafe mailing list