Date: Tue, 14 Nov 2000 19:25:27 -0800 From: Mike Smith <msmith@freebsd.org> To: John Baldwin <jhb@FreeBSD.org> Cc: cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/sys eventhandler.h Message-ID: <200011150325.eAF3PRF01212@mass.osd.bsdi.com> In-Reply-To: Your message of "Tue, 14 Nov 2000 10:23:00 PST." <200011141823.KAA89218@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> 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.
--
... every activity meets with opposition, everyone who acts has his
rivals and unfortunately opponents also. But not because people want
to be opponents, rather because the tasks and relationships force
people to take different points of view. [Dr. Fritz Todt]
V I C T O R Y N O T V E N G E A N C E
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?200011150325.eAF3PRF01212>
