Re: FreeBSD deadlock (with fork?)

From: Daniel Eischen <deischen_at_freebsd.org>
Date: Thu, 18 Sep 2008 17:14:39 -0400 (EDT)
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
Received on Thu Sep 18 2008 - 19:14:43 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:35 UTC