cvs commit: src/sys/kern kern_timeout.c

John Baldwin jhb at
Fri Aug 31 12:01:31 PDT 2007

jhb         2007-08-31 19:01:30 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             kern_timeout.c 
  Close a race that snuck in with the recent changes to fix a LOR between
  the callout_lock spin lock and the sleepqueue spin locks.  In the fix,
  callout_drain() has to drop the callout_lock so it can acquire the
  sleepqueue lock.  The state of the callout can change while the
  callout_lock is held however (for example, it can be rescheduled via
  callout_reset()).  The previous code assumed that the only state change
  that could happen is that the callout could finish executing.  This change
  alters callout_drain() to effectively restart and recheck everything
  after it acquires the sleepqueue lock thus handling all the possible
  states that the callout could be in after any changes while callout_lock
  was dropped.
  Approved by:    re (kensmith)
  Tested by:      kris
  Revision  Changes    Path
  1.105     +27 -13    src/sys/kern/kern_timeout.c

More information about the cvs-src mailing list