diff options
| author | raf <none@none> | 2005-08-21 09:47:45 -0700 |
|---|---|---|
| committer | raf <none@none> | 2005-08-21 09:47:45 -0700 |
| commit | 97eda132fb49582e04504d6a221b98750a14f5b3 (patch) | |
| tree | 90932c3ea45a238046b424e8d6128a831a38a8b2 /usr/src/uts/common/os/sched.c | |
| parent | 88485144e0c16f378895536e5ea6cd0b331a2cc7 (diff) | |
| download | illumos-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.c | 19 |
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: |
