Author: jhb
Date: Tue Nov  4 19:13:53 2008
New Revision: 184653
URL: http://svn.freebsd.org/changeset/base/184653

Log:
  Don't bother calling setrunnable() and clearing the sleeping flag in
  sleepq_resume_thread() if the thread isn't asleep.

Modified:
  head/sys/kern/subr_sleepqueue.c

Modified: head/sys/kern/subr_sleepqueue.c
==============================================================================
--- head/sys/kern/subr_sleepqueue.c     Tue Nov  4 19:04:01 2008        
(r184652)
+++ head/sys/kern/subr_sleepqueue.c     Tue Nov  4 19:13:53 2008        
(r184653)
@@ -680,22 +680,25 @@ sleepq_resume_thread(struct sleepqueue *
        td->td_wchan = NULL;
        td->td_flags &= ~TDF_SINTR;
 
-       /*
-        * Note that thread td might not be sleeping if it is running
-        * sleepq_catch_signals() on another CPU or is blocked on
-        * its proc lock to check signals.  It doesn't hurt to clear
-        * the sleeping flag if it isn't set though, so we just always
-        * do it.  However, we can't assert that it is set.
-        */
        CTR3(KTR_PROC, "sleepq_wakeup: thread %p (pid %ld, %s)",
            (void *)td, (long)td->td_proc->p_pid, td->td_name);
-       TD_CLR_SLEEPING(td);
 
        /* Adjust priority if requested. */
        MPASS(pri == 0 || (pri >= PRI_MIN && pri <= PRI_MAX));
        if (pri != 0 && td->td_priority > pri)
                sched_prio(td, pri);
-       return (setrunnable(td));
+
+       /*
+        * Note that thread td might not be sleeping if it is running
+        * sleepq_catch_signals() on another CPU or is blocked on its
+        * proc lock to check signals.  There's no need to mark the
+        * thread runnable in that case.
+        */
+       if (TD_IS_SLEEPING(td)) {
+               TD_CLR_SLEEPING(td);
+               return (setrunnable(td));
+       }
+       return (0);
 }
 
 #ifdef INVARIANTS
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to