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
On Fri, 13 May 2005, Hervé Kergourlay wrote: > Seán C. Farley a écrit : > >> On Thu, 12 May 2005, Seán C. Farley wrote: >> >>> On Thu, 12 May 2005, Hervé Kergourlay wrote: >>> >>> <snip> >>> >>>> 4) wait() API >>>> >>>> 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 >>>> >>>> If there is no evidence, ask me for more informations >>> >>> >>> The second problem sounds like what I am encountering >>> (http://www.freebsd.org/cgi/query-pr.cgi?pr=77818) with zsh for my >>> shell. You did suspend (sigsuspend()) SIGCHLD before the fork? By >>> "fork fork", do you mean you fork twice? >> >> >> 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. >> >> Seán >> >> P.S. I included David since he has been trying to help me with this >> bug. >> >> 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án 1. http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/77537 -- sean-freebsd@farley.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050513123403.J11641>
