diff options
author | davidxu <davidxu@FreeBSD.org> | 2002-10-24 14:43:48 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2002-10-24 14:43:48 +0000 |
commit | 1dbc90aa7516c9dc4abaad0aa4f6dbd8b875a370 (patch) | |
tree | 6acb70d3e39a5cdbf237228618f27720765d6a45 /sys/kern/kern_kse.c | |
parent | e5963e51d51a51bac1ada4ca2faeb73d74a301af (diff) | |
download | FreeBSD-src-1dbc90aa7516c9dc4abaad0aa4f6dbd8b875a370.zip FreeBSD-src-1dbc90aa7516c9dc4abaad0aa4f6dbd8b875a370.tar.gz |
respect TDF_SINTR, also for SINGLE_NO_EXIT threading mode, if a thread
was already suspended, do nothing.
Diffstat (limited to 'sys/kern/kern_kse.c')
-rw-r--r-- | sys/kern/kern_kse.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/kern/kern_kse.c b/sys/kern/kern_kse.c index f64ae8b..02a62f6 100644 --- a/sys/kern/kern_kse.c +++ b/sys/kern/kern_kse.c @@ -1406,17 +1406,17 @@ thread_single(int force_exit) if (TD_IS_SUSPENDED(td2)) { if (force_exit == SINGLE_EXIT) { thread_unsuspend_one(td2); + } else { + continue; } } - if ( TD_IS_SLEEPING(td2)) { + if (TD_ON_SLEEPQ(td2) && + (td2->td_flags & TDF_SINTR)) { if (td2->td_flags & TDF_CVWAITQ) - cv_waitq_remove(td2); + cv_abort(td2); else - unsleep(td2); - break; + abortsleep(td2); } - if (TD_CAN_RUN(td2)) - setrunqueue(td2); } } /* |