Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Dec 2001 16:40:42 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Alfred Perlstein <bright@mu.org>
Cc:        current@freebsd.org, Julian Elischer <julian@elischer.org>
Subject:   Re: Is this a bug in the fork() code?
Message-ID:  <XFMail.011218164042.jhb@FreeBSD.org>
In-Reply-To: <20011218182421.M59831@elvis.mu.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On 19-Dec-01 Alfred Perlstein wrote:
> * Julian Elischer <julian@elischer.org> [011218 18:20] wrote:
>> 
>> now, what is to say that the process has not exitted by this stage, and
>> been reeped by init (on SMP)
>> particularly since between the two is:
>> 
>>         /*
>>          * Preserve synchronization semantics of vfork.  If waiting for
>>          * child to exec or exit, set P_PPWAIT on child, and sleep on our
>>          * proc (in case of exit).
>>          */
>>         PROC_LOCK(p2);
>>         while (p2->p_flag & P_PPWAIT)
>>                 msleep(p1, &p2->p_mtx, PWAIT, "ppwait", 0);
>>         PROC_UNLOCK(p2);
>> 
>> It may be that due to some semantics of teh fork calls
>> you cannot have P_PPWAIT and a process queued to run on the other
>> processor while reparented to init(1) but I can't see it..
>> the result would be that the return value MIGHT be teh pid
>> of a totally different process if the proc structure had been re-used.
>> 
>> Alternatively I could have some good weed here...
> 
> That's not possible, since the parent is waiting the kernel will
> not reparent unless the parent exits, which it doesn't because it's
> waiting for the child.
> 
> You owe the Oracle a large bong rip.

Look at RFNOWAIT silly.  It forces a parent to init during fork1() itself.

-- 

John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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