summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_thread.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2002-10-24 14:43:48 +0000
committerdavidxu <davidxu@FreeBSD.org>2002-10-24 14:43:48 +0000
commit1dbc90aa7516c9dc4abaad0aa4f6dbd8b875a370 (patch)
tree6acb70d3e39a5cdbf237228618f27720765d6a45 /sys/kern/kern_thread.c
parente5963e51d51a51bac1ada4ca2faeb73d74a301af (diff)
downloadFreeBSD-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_thread.c')
-rw-r--r--sys/kern/kern_thread.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index f64ae8b..02a62f6 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.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);
}
}
/*
OpenPOWER on IntegriCloud