diff options
author | julian <julian@FreeBSD.org> | 2002-08-22 21:45:58 +0000 |
---|---|---|
committer | julian <julian@FreeBSD.org> | 2002-08-22 21:45:58 +0000 |
commit | 169932bd89c145cdb9856cfe6eaf6404cdd06e5a (patch) | |
tree | a5d47668028d913f63c63c82275b6116ae3b9620 /sys/kern/kern_exec.c | |
parent | 7a233d4c9f8562bf331fa9b7d4d1f649521fb602 (diff) | |
download | FreeBSD-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.c | 16 |
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); |