summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/os/sched.c
diff options
context:
space:
mode:
authorraf <none@none>2005-08-21 09:47:45 -0700
committerraf <none@none>2005-08-21 09:47:45 -0700
commit97eda132fb49582e04504d6a221b98750a14f5b3 (patch)
tree90932c3ea45a238046b424e8d6128a831a38a8b2 /usr/src/uts/common/os/sched.c
parent88485144e0c16f378895536e5ea6cd0b331a2cc7 (diff)
downloadillumos-joyent-97eda132fb49582e04504d6a221b98750a14f5b3.tar.gz
6272865 race condition between SIGKILL and /proc PCAGENT
Diffstat (limited to 'usr/src/uts/common/os/sched.c')
-rw-r--r--usr/src/uts/common/os/sched.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/usr/src/uts/common/os/sched.c b/usr/src/uts/common/os/sched.c
index 006fd76d2c..ba3af1cd01 100644
--- a/usr/src/uts/common/os/sched.c
+++ b/usr/src/uts/common/os/sched.c
@@ -19,6 +19,7 @@
*
* CDDL HEADER END
*/
+
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
@@ -260,13 +261,11 @@ top:
continue;
/*
- * Skip processes which are exiting. This is
- * determined by checking p_lwpcnt since SZOMB is
- * set after the addressed space is released.
+ * Skip processes that are exiting
+ * or whose address spaces are locked.
*/
mutex_enter(&prp->p_lock);
- if (prp->p_lwpcnt == 0 ||
- (prp->p_flag & SEXITLWPS) ||
+ if ((prp->p_flag & SEXITING) ||
(prp->p_as != NULL && AS_ISPGLCK(prp->p_as))) {
mutex_exit(&prp->p_lock);
continue;
@@ -409,13 +408,11 @@ unload:
}
/*
- * Skip processes which are exiting. This is determined
- * by checking p_lwpcnt since SZOMB is set after the
- * addressed space is released.
+ * Skip processes that are exiting
+ * or whose address spaces are locked.
*/
mutex_enter(&prp->p_lock);
- if (prp->p_lwpcnt == 0 ||
- (prp->p_flag & SEXITLWPS) ||
+ if ((prp->p_flag & SEXITING) ||
(prp->p_as != NULL && AS_ISPGLCK(prp->p_as))) {
mutex_exit(&prp->p_lock);
continue;
@@ -644,7 +641,7 @@ swapout(proc_t *pp, uint_t *swrss, int swapflags)
ASSERT(MUTEX_HELD(&pp->p_lock));
- if (pp->p_lwpcnt == 0 || (pp->p_flag & SEXITLWPS))
+ if (pp->p_flag & SEXITING)
return (0);
top: