callout(9) and Giant lock
jhb at freebsd.org
Mon Jul 13 18:44:43 UTC 2009
On Sunday 28 June 2009 11:57:05 am Robert Watson wrote:
> On Sun, 28 Jun 2009, Sebastian Huber wrote:
> > suppose that a certain time event triggered several callout functions. What
> > happens if the first of these callout functions blocks on the Giant lock?
> > Does this delay all further callout functions until the Giant lock is
> > available for the first callout function? What happens if one of the callout
> > function blocks forever? Does this deadlock the system?
> Callouts are marked as MPSAFE or non-MPSAFE when registered. If non-MPSAFE,
> we will acquire Giant automatically for the callout, but I believe we'll also
> try and sort non-MPSAFE callouts behind MPSAFE ones in execution order to
> minimize latency for MPSAFE callouts. Most callouts acquire locks of some
> sort, and stalling any callout indefinitely will stall the entire callout
> thread indefinitely, which in turn could lead to a variety of odd behaviors
> and potentially (although not necessarily) deadlock.
FWIW, we do not actually sort the callouts in this manner, so all callouts
will be blocked until Giant is acquired.
More information about the freebsd-hackers