FreeBSD deadlock (with fork?)
deischen at freebsd.org
Thu Sep 18 21:14:43 UTC 2008
On Thu, 18 Sep 2008, David Naylor wrote:
> On Thursday 18 September 2008 18:23:22 you wrote:
>> David Naylor wrote:
>>> I have a program that spawns a lot of subprocesses (with pipes open) from
>>> multiple threads. The problem is the program often deadlocks, but not
>>> consistently. Sometimes the program can run over 5 times to competition
>>> without incidence and yet othertimes it locks within a few seconds.
>> you sent this to -current. Is it in -current? (we fixed something like
>> this some months back in current and 7)
> -current cvsuped about Tuesday.
>> do your post-fork processes do an exec? according to the spec they
> Yes, they do. See the other replies...
>> if any of your threads other than the one that did the fork ho;ds any
>> mutex at teh time of fork then your process will hang. If they hold a
>> umtx (between processes) then everything will hang.
> Yes, the system does make use of mutexes. The forking thread never holds a
> mutex but other threads could hold a mutex. This would explain the problem.
> Is there any way to get around it (i.e. make sure no mutexes are held when a
> fork is called?)
You can hold mutexes while forking, you just can't rely on
their state in any child process.
There is also pthread_atfork().
More information about the freebsd-current