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.

>> -GAWollman

-- 

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

Reply via email to