summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2002-08-22 21:45:58 +0000
committerjulian <julian@FreeBSD.org>2002-08-22 21:45:58 +0000
commit169932bd89c145cdb9856cfe6eaf6404cdd06e5a (patch)
treea5d47668028d913f63c63c82275b6116ae3b9620 /sys/kern/kern_exec.c
parent7a233d4c9f8562bf331fa9b7d4d1f649521fb602 (diff)
downloadFreeBSD-src-169932bd89c145cdb9856cfe6eaf6404cdd06e5a.zip
FreeBSD-src-169932bd89c145cdb9856cfe6eaf6404cdd06e5a.tar.gz
slight cleanup of single-threading code for KSE processes
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r--sys/kern/kern_exec.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index c01f4fa..02af5ee 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -162,11 +162,19 @@ execve(td, uap)
PROC_LOCK(p);
KASSERT((p->p_flag & P_INEXEC) == 0,
("%s(): process already has P_INEXEC flag", __func__));
- if ((p->p_flag & P_KSES) && thread_single(SNGLE_EXIT)) {
- PROC_UNLOCK(p);
- return (ERESTART); /* Try again later. */
+ if (p->p_flag & P_KSES) {
+ if (thread_single(SNGLE_EXIT)) {
+ PROC_UNLOCK(p);
+ return (ERESTART); /* Try again later. */
+ }
+ /*
+ * If we get here all other threads are dead,
+ * so unset the associated flags and lose KSE mode.
+ */
+ p->p_flag &= ~P_KSES;
+ td->td_flags &= ~TDF_UNBOUND;
+ thread_single_end();
}
- /* If we get here all other threads are dead. */
p->p_flag |= P_INEXEC;
PROC_UNLOCK(p);
OpenPOWER on IntegriCloud