diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2009-07-14 22:52:46 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2009-07-14 22:52:46 +0000 |
| commit | f33a947b56e0667c6e1e3384d00ffb1a5b67060e (patch) | |
| tree | b51305b6f0c522d37eac747f4cbb29242078546b /sys/kern/kern_thread.c | |
| parent | 79799053a79ee5bb0446bcf61312caea774c2a14 (diff) | |
Notes
Diffstat (limited to 'sys/kern/kern_thread.c')
| -rw-r--r-- | sys/kern/kern_thread.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index f04b2a6b3e62..d47bd8cef8b6 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -598,18 +598,17 @@ thread_single(int mode) wakeup_swapper |= sleepq_abort(td2, ERESTART); break; + case SINGLE_NO_EXIT: + if (TD_IS_SUSPENDED(td2) && + !(td2->td_flags & TDF_BOUNDARY)) + wakeup_swapper |= + thread_unsuspend_one(td2); + if (TD_ON_SLEEPQ(td2) && + (td2->td_flags & TDF_SINTR)) + wakeup_swapper |= + sleepq_abort(td2, ERESTART); + break; default: - if (TD_IS_SUSPENDED(td2)) { - thread_unlock(td2); - continue; - } - /* - * maybe other inhibited states too? - */ - if ((td2->td_flags & TDF_SINTR) && - (td2->td_inhibitors & - (TDI_SLEEPING | TDI_SWAPPED))) - thread_suspend_one(td2); break; } } |
