FreeBSD deadlock (with fork?)

Daniel Eischen 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:
>>> Hi,
>>>
>>> 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
>> should.
>
> 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().

-- 
DE


More information about the freebsd-current mailing list