Date: Fri, 23 Feb 2007 06:04:01 +0800 From: LI Xin <delphij@delphij.net> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-arch@freebsd.org Subject: Re: Patch for review: resolve a race condition in [sg]etpriority() Message-ID: <45DE1351.6060901@delphij.net> In-Reply-To: <200702221639.12751.jhb@freebsd.org> References: <45CC0EB9.7030400@delphij.net> <200702090837.04495.jhb@freebsd.org> <45DDD816.80303@delphij.net> <200702221639.12751.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 John Baldwin wrote: > On Thursday 22 February 2007 12:51, LI Xin wrote: >> Hi, John, >> >> John Baldwin wrote: >>> My only reason for favoring the wakeup for complete initialization is that >>> while this patch may solve the getprio/setprio race, it doesn't solve all >>> PRS_NEW-related races, which the sleep/wakeup proposal did. >> Today I have some time and tried your approach for a second time. It >> looks like that we can not simply sleep with allproc_lock held. The >> attached patchset implements the proof-of-concept idea, please let me >> know if you think this one is better. > > Ok. It would actually be really nice if we could not put the process onto > the allproc list until it was really fully created. Is the only reason we put > it on the list to prevent duplicate pid allocation? I tend to disagree with that. Here is a scenario that makes this incorrect for setpriority, somewhat like what I have discussed with Robert earlier: A B (start forking) (copy p2 from p1) (setpriority in PRIO_USER case) <--user identical, but invisible to B (insert p2 into allproc) We end up with p2's priority unset, while p1's set. I think this is not what we want. If this is acceptable, then the easiest solution would be just skip PRS_NEW processes :-) In order to make setpriority() correct, it seems that we should have B either set p2's priority (initialized to a state where B can see it and operate without problem), or have a not-copied p2 if B can not see it, or at least block when the copy is in progress. Cheers, - -- Xin LI <delphij@delphij.net> http://www.delphij.net/ FreeBSD - The Power to Serve! -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFF3hNROfuToMruuMARCly/AJ9a5I8JPTUsIJBi57nkNbllSVUXGgCeIqV0 YKm7guWpFkiFe7Bxvs/Xvck= =9NKM -----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45DE1351.6060901>