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

  FreeBSD src repository

  Modified files:
    sys/kern             kern_timeout.c 
  Log:
  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
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to