On 05-Apr-01 John Baldwin wrote:
> On 05-Apr-01 Garrett Wollman wrote:
>> <<On Thu, 05 Apr 2001 01:39:35 -0500, Richard Todd
>> <[EMAIL PROTECTED]> said:
>>> If I'm reading this backtrace right, the thread handling the sound
>>> hardware called selwakeup() (frame #19). This called pfind() (frame
>>> #18), which tries to lock allproc.
>> selwakeup() shouldn't need to call pfind(). Because the process table
>> is in type-stable memory, it should be sufficient to keep a reference
>> to the caller's proc structure and check to see whether its pid is the
>> same one as in the selinfo. The locking that selwakeup() already
>> needs to do should be sufficient to avoid a race.
>> (In 4.4BSD, process structures were not type-stable so this technique
>> could not have been used.)
> There are probably several other places that pfind is called that this check
> should also be adequate for as well. The ones in syscons for example.
As a safety check we should probably zero the pid right before zfree()'ing a
proc in wait() however, so that a stale pointer to a free'd process doesn't
have a valid pid if we do this.
John Baldwin <[EMAIL PROTECTED]> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!" - http://www.FreeBSD.org/
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message