diff options
author | cwb <none@none> | 2005-07-21 08:29:59 -0700 |
---|---|---|
committer | cwb <none@none> | 2005-07-21 08:29:59 -0700 |
commit | 16ade92d9ce9c9ab33a25f7a2fdd00b581b6efda (patch) | |
tree | 1a878f0ece76b0bbe0842cc9d25e5ca6eb8e4997 /usr/src/uts/common/sys/klwp.h | |
parent | 80b8e1d8e1181e1da4f3eccd1df6261d543bf793 (diff) | |
download | illumos-joyent-16ade92d9ce9c9ab33a25f7a2fdd00b581b6efda.tar.gz |
4522909 automountd hangs with executable maps
Diffstat (limited to 'usr/src/uts/common/sys/klwp.h')
-rw-r--r-- | usr/src/uts/common/sys/klwp.h | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/usr/src/uts/common/sys/klwp.h b/usr/src/uts/common/sys/klwp.h index 53204efe04..ade26b4f82 100644 --- a/usr/src/uts/common/sys/klwp.h +++ b/usr/src/uts/common/sys/klwp.h @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -161,12 +161,34 @@ typedef struct _klwp { struct itimerval lwp_timer[3]; /* - * used to stop/alert lwps + * There are a number of places where you do not wish an lwp to + * be stopped due to some interaction with other lwps in the process. + * In these cases the lwp_nostop value is incremented. At places where + * the lwp would normally be stopped the stop is allowed if lwp_nostop + * is zero. There are a very few cases where even if lwp_nostop is set + * we need to allow the lwp to stop. In those cases the lwp is + * stopped if lwp_nostop_r is not set regardless of the state of + * lwp_nostop. These conditions are: + * + * 1. In issig_forreal() when another lwp is undergoing fork1() + * or watchpoint activity (p_flag contains either SHOLDFORK1 or + * SHOLDWATCH or t_proc_flag contains TP_HOLDLWP) + * + * 2. In stop() when the why argument is not PR_SUSPENDED or the what + * argument is not SUSPEND_NORMAL. + * + * 3. In cv_wait_stop() when another lwp is undergoing fork1() or + * watchpoint activity (p_flag contains either SHOLDFORK1 or + * SHOLDWATCH or t_proc_flag contains TP_HOLDLWP) + * + * lwp_nostop_r is set in prstop(). ie we honour the presence of + * SHOLDFORK1 or SHOLDWATCH or TP_HOLDLWP in the case of + * stop(PR_SUSPENDED, SUSPEND_NORMAL) */ char lwp_unused; char lwp_state; /* Running in User/Kernel mode (no lock req) */ - ushort_t lwp_nostop; /* Don't stop this lwp (no lock required) */ - kcondvar_t lwp_cv; + ushort_t lwp_nostop; /* Don't stop this lwp except SUSPEND_NORMAL */ + ushort_t lwp_nostop_r; /* Don't stop this lwp (avoid recursion) */ /* * Last failed privilege. |