p4-projects@freebsd.org
[Top] [All Lists]

PERFORCE change 65488 for review

Subject: PERFORCE change 65488 for review
From: David Xu
Date: Sat, 20 Nov 2004 02:18:59 GMT
http://perforce.freebsd.org/chv.cgi?CH=65488

Change 65488 by davidxu@davidxu_alona on 2004/11/20 02:18:27

        if a thread is resumed by thr_wake, it should return 0, 
        for example, a signal can cause ERESTART to be returned,
        this will cause the wakeup to be lost.

Affected files ...

.. //depot/projects/davidxu_thread/src/sys/kern/kern_thr.c#3 edit

Differences ...

==== //depot/projects/davidxu_thread/src/sys/kern/kern_thr.c#3 (text+ko) ====

@@ -270,11 +270,21 @@
        if ((td->td_flags & TDF_THRWAKEUP) == 0)
                error = msleep((void *)td, &td->td_proc->p_mtx,
                    td->td_priority | PCATCH, "lthr", hz);
-       mtx_lock_spin(&sched_lock);
-       td->td_flags &= ~TDF_THRWAKEUP;
-       mtx_unlock_spin(&sched_lock);
+       if (td->td_flags & TDF_THRWAKEUP) {
+               mtx_lock_spin(&sched_lock);
+               td->td_flags &= ~TDF_THRWAKEUP;
+               mtx_unlock_spin(&sched_lock);
+               PROC_UNLOCK(td->td_proc);
+               return (0);
+       }
        PROC_UNLOCK(td->td_proc);
-       return (error == EWOULDBLOCK ? ETIMEDOUT : error);
+       if (error == EWOULDBLOCK)
+               error = ETIMEDOUT;
+       else if (error == ERESTART) {
+               if (hz != 0)
+                       error = EINTR;
+       }
+       return (error);
 }
 
 int
_______________________________________________
p4-projects@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/p4-projects
To unsubscribe, send any mail to "p4-projects-unsubscribe@xxxxxxxxxxx"

<Prev in Thread] Current Thread [Next in Thread>
  • PERFORCE change 65488 for review, David Xu <=