git: kernel - Fix panic related to kqueue-based timers

Matthew Dillon dillon at crater.dragonflybsd.org
Wed Sep 7 15:52:29 PDT 2011


commit b90e37ec76a8f3cfd0c32fa2bd292cb261773d85
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Wed Sep 7 15:48:07 2011 -0700

    kernel - Fix panic related to kqueue-based timers
    
    * Fix a panic related to kqueue-based timers.  When a knote is destroyed it
      is possible for the callout_stop() to race a callout on another cpu that
      is blocked on a lock.
    
    * Introduce callout_terminate() which stops a callout and ensures that no
      function calls for the callout is still in progress before returning.
      The kevent code now uses this function instead of callout_stop().
    
    * We can't have this assurance for the normal callout_stop() function because
      it can deadlock a backend stuck waiting for a lock when a frontend holding
      that lock calls callout_stop().
    
    Reported-by: Antonio Huete Jimenez <tuxillo at quantumachine.net>

Summary of changes:
 sys/kern/kern_event.c   |   13 +++++++++----
 sys/kern/kern_timeout.c |   40 +++++++++++++++++++++++++++++++++++++++-
 2 files changed, 48 insertions(+), 5 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/b90e37ec76a8f3cfd0c32fa2bd292cb261773d85


-- 
DragonFly BSD source repository





More information about the Commits mailing list