diff options
-rw-r--r-- | sys/kern/kern_sig.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index e6a6e17..d204949 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -1228,15 +1228,13 @@ kern_sigaltstack(struct thread *td, stack_t *ss, stack_t *oss) int error = 0; mtx_lock(&Giant); - + PROC_LOCK(p); oonstack = sigonstack(cpu_getstack(td)); if (oss != NULL) { - PROC_LOCK(p); *oss = p->p_sigstk; oss->ss_flags = (p->p_flag & P_ALTSTACK) ? ((oonstack) ? SS_ONSTACK : 0) : SS_DISABLE; - PROC_UNLOCK(p); } if (ss != NULL) { @@ -1253,17 +1251,14 @@ kern_sigaltstack(struct thread *td, stack_t *ss, stack_t *oss) error = ENOMEM; goto done2; } - PROC_LOCK(p); p->p_sigstk = *ss; p->p_flag |= P_ALTSTACK; - PROC_UNLOCK(p); } else { - PROC_LOCK(p); p->p_flag &= ~P_ALTSTACK; - PROC_UNLOCK(p); } } done2: + PROC_UNLOCK(p); mtx_unlock(&Giant); return (error); } |