Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 May 2005 12:45:12 -0500 (CDT)
From:      =?ISO-8859-1?Q?Se=E1n_C=2E_Farley?= <sean-freebsd@farley.org>
To:        =?ISO-8859-1?Q?Herv=E9_Kergourlay?= <herve.kergourlay@atempo.com>
Cc:        David Xu <davidxu@freebsd.org>
Subject:   Re: Porting on FreeBSD 53
Message-ID:  <20050513123403.J11641@thor.farley.org>
In-Reply-To: <4284CFB5.7040805@atempo.com>
References:  <428307A9.10901@atempo.com> <20050512134151.O2556@thor.farley.org> <20050512163409.O4283@thor.farley.org> <4284CFB5.7040805@atempo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-254365337-1116006312=:11641
Content-Type: TEXT/PLAIN; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: QUOTED-PRINTABLE

On Fri, 13 May 2005, Herv=E9 Kergourlay wrote:

> Se=E1n C. Farley a =E9crit :
>
>> On Thu, 12 May 2005, Se=E1n C. Farley wrote:
>>=20
>>> On Thu, 12 May 2005, Herv=E9 Kergourlay wrote:
>>>=20
>>> <snip>
>>>=20
>>>> 4) wait() API
>>>>=20
>>>> 2 problems, the first is a ECHILD error on a wait call after a fork
>>>> fork The code is generic for most of unix system. Is there any
>>>> specific problems to manage the fork and wait APIs ?  the second
>>>> problem with calls is a blocking wait() call in the same condition
>>>> but this time the son process is finished but the wait call in the
>>>> father stays blocked, again it's a generic Unix code
>>>>=20
>>>> If there is no evidence, ask me for more informations
>>>=20
>>>=20
>>> The second problem sounds like what I am encountering
>>> (http://www.freebsd.org/cgi/query-pr.cgi?pr=3D77818) with zsh for my
>>> shell.  You did suspend (sigsuspend()) SIGCHLD before the fork?  By
>>> "fork fork", do you mean you fork twice?
>>=20
>>=20
>> Ah ha!  I see the problem that has been causing me this problem and
>> probably you too.  Signal suspensions (only these?) are not being
>> copied with a double fork().  Here is an example program[1] to
>> illustrate.  They do get copied on FreeBSD-4.10 and Linux.  I just do
>> not know if they are supposed to be copied.
>>=20
>> Se=E1n
>>=20
>> P.S.  I included David since he has been trying to help me with this
>> bug.
>>=20
>>   1. http://www.farley.org/freebsd/tmp/grandparent.c
>
>
> I test your sample
>
> it's working on Linux and FreeBSD 4.0 but failing on FreeBDS 5.2 et
> 5.3.  the process stays blocked on the suspend call
>
> I rewrite another sample with the same model, joined here, as we wrote
> it in our main program. It's working also on Linux but failing on all
> FreeBSD included FreeBSD 4.0, 5.2 et 5.3
>
> trace when working
>
> avant FORK : pid 71995.
> avant FORK : pid 71996.
> son pid 71997.
> Child calling execve(/bin/ls).
> sigw    sigw.c  sigw2   sigw2.c
> Grand parent pid 71996.
> Grand parent waiting for a signal.
> Parent pid 71997.
> Parent waiting for a signal.
> Parent get status 100000.
> Grand parent get status 100000.
>
> trace when failing
>
> avant FORK : pid 71995.
> avant FORK : pid 71996.
> son pid 71997.
> Child calling execve(/bin/ls).
> sigw    sigw.c  sigw2   sigw2.c
> Grand parent pid 71996.
> Grand parent waiting for a signal.
> Parent pid 71997.
> Parent waiting for a signal.
> wait returned No child processes.
> wait returned No child processes.
>
> the wait call return with an errno ECHILD ??

The children are exiting before the parents (due to sleep()'s) get to
their wait()'s.

> did you have any idea if the problem will be solve by the FreeBSD team
> or not ?

I updated my bug report and tried to notify David Xu but the e-mail
server rejected the e-mail (too many "Received" headers).  I am also
Cc'ing Greg Lehey since he ran into a possibly similar bug[1] in
February.

> or if there is a workarouund ?

Reapplying the sigsuspend() before each fork() may work.

Se=E1n
   1. http://www.freebsd.org/cgi/query-pr.cgi?pr=3Dkern/77537
--=20
sean-freebsd@farley.org
--0-254365337-1116006312=:11641--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050513123403.J11641>