Author: jch
Date: Thu Aug 27 08:15:32 2015
New Revision: 287196
URL: https://svnweb.freebsd.org/changeset/base/287196

Log:
  In callout_stop(), if a callout is both pending and currently
  being serviced return 0 (fail) but it is applicable only
  mpsafe callouts.  Thanks to hselasky for finding this.
  
  Differential Revision:        https://reviews.freebsd.org/D3078 (Updated)
  Submitted by:         hselasky
  Reviewed by:          jch

Modified:
  head/sys/kern/kern_timeout.c

Modified: head/sys/kern/kern_timeout.c
==============================================================================
--- head/sys/kern/kern_timeout.c        Thu Aug 27 07:53:58 2015        
(r287195)
+++ head/sys/kern/kern_timeout.c        Thu Aug 27 08:15:32 2015        
(r287196)
@@ -1379,11 +1379,13 @@ again:
        }
        callout_cc_del(c, cc);
 
-       /*
-        * If we are asked to stop a callout which is currently in progress
-        * and indeed impossible to stop then return 0.
-        */
-       not_running = !(cc_exec_curr(cc, direct) == c);
+       if (!use_lock) {
+               /*
+                * If we are asked to stop a callout which is currently in 
progress
+                * and indeed impossible to stop then return 0.
+                */
+               not_running = !(cc_exec_curr(cc, direct) == c);
+       }
 
        CC_UNLOCK(cc);
        return (not_running);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to