diff options
Diffstat (limited to 'sys/kern/kern_synch.c')
| -rw-r--r-- | sys/kern/kern_synch.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index 813bec10b8c2..6a20e1038f8c 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -451,7 +451,9 @@ msleep(ident, mtx, priority, wmesg, timo) p->p_sflag &= ~PS_TIMEOUT; if (sig == 0) rval = EWOULDBLOCK; - } else if (timo && callout_stop(&p->p_slpcallout) == 0) { + } else if (p->p_sflag & PS_TIMOFAIL) + p->p_sflag &= ~PS_TIMOFAIL; + else if (timo && callout_stop(&p->p_slpcallout) == 0) { /* * This isn't supposed to be pretty. If we are here, then * the endtsleep() callout is currently executing on another @@ -524,7 +526,8 @@ endtsleep(arg) else unsleep(p); p->p_sflag |= PS_TIMEOUT; - } + } else + p->p_sflag |= PS_TIMOFAIL; mtx_unlock_spin(&sched_lock); } |
