Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Nov 2000 20:55:38 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Mike Smith <msmith@FreeBSD.org>
Cc:        cvs-all@FreeBSD.org, cvs-committers@FreeBSD.org
Subject:   Re: cvs commit: src/sys/sys eventhandler.h
Message-ID:  <200011150455.UAA12866@john.baldwin.cx>
In-Reply-To: <200011150325.eAF3PRF01212@mass.osd.bsdi.com>

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

On 15-Nov-00 Mike Smith wrote:
>> jhb         2000/11/14 10:23:00 PST
>> 
>>   Modified files:
>>     sys/sys              eventhandler.h 
>>   Log:
>>   Only hold the mutex for an eventhandler list while the list is being
>>   accessed.
>>   Specifically, don't hold the lock while calling event handlers as a
>>   handler
>>   may tsleep() while holding the mutex.
> 
> This is wrong and should be backed out; the tsleep() in the handler is 
> the bug.  You can't release the lock on the list while you're traversing 
> it, since the traversal is holding private state which has to remain 
> consistent with the list.
> 
> If you want to release the lock on the list, you would have to detect 
> when the list is changed and rescan it to find the 'new' current 
> location.  Only that doesn't work either, since the list traversal allows 
> you to remove the current handler from the list.
> 
> Please revert this change and fix eventhandler clients so that they don't 
> sleep.

Hrm, I guess I could go hard-code all the shutdown events to not use tsleep but
to use delay()'s.  This means hacking up or duplicating things like
suspend_kproc(). :(.   You shouldn't be holding a lock while you are calling
functions that aren't related to the resource you are holding.  Grrr.  Would
it be feasible to say that an eventhandler may not modify a list it is on? 
Perhaps extending the eventhandler interface to allow for once-only events
would be sufficient.

-- 

John Baldwin <jhb@FreeBSD.org> -- 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 majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




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