cvs commit: src/sys/kern kern_event.c src/sys/sys eventvar.h

Don Lewis truckman at FreeBSD.org
Wed Jul 14 22:50:41 PDT 2004


On 14 Jul, Alfred Perlstein wrote:
> * Don Lewis <truckman at FreeBSD.org> [040714 13:38] wrote:
>> On 14 Jul, Alfred Perlstein wrote:
>> > * Doug Rabson <dfr at nlsystems.com> [040714 12:01] wrote:
>> 
>> >> Seems to me that the best thing to do is to defer the psigio() to a 
>> >> taskqueue that will run in a simpler locking environment.
>> > 
>> > I was thinking that, but I'm worried about "stale delivery",
>> > perhaps we need to record the generation count (process start time)
>> > in the sigio as well as the request sent, so that we don't send
>> > a signal to the wrong process.
>> 
>> This is already handled in the sigio infrastructure.  Both struct proc
>> and struct pgrp have a list of their potential sigio sources. When the
>> process or process group goes away, the exit code disables sigio
>> delivery.
> 
> Yes, but if the delivery of the signal becomes async, then we lose
> this.

Push a reference to the struct sigio onto the taskqueue would be a quick
and dirty way of dealing with this.  The ugly part is that it would mean
adding a reference count and a valid flag to the struct sigio.



More information about the cvs-all mailing list