summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/syscall/signotify.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/syscall/signotify.c')
-rw-r--r--usr/src/uts/common/syscall/signotify.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/usr/src/uts/common/syscall/signotify.c b/usr/src/uts/common/syscall/signotify.c
index d851abebba..bf5ed3b45e 100644
--- a/usr/src/uts/common/syscall/signotify.c
+++ b/usr/src/uts/common/syscall/signotify.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -229,7 +229,6 @@ int
sigresend(int sig, siginfo_t *siginfo, sigset_t *mask)
{
kthread_t *t = curthread;
- proc_t *p = ttoproc(t);
klwp_t *lwp = ttolwp(t);
sigqueue_t *sqp = kmem_zalloc(sizeof (*sqp), KM_SLEEP);
sigset_t set;
@@ -261,9 +260,11 @@ sigresend(int sig, siginfo_t *siginfo, sigset_t *mask)
}
sigutok(&set, &kset);
- mutex_enter(&p->p_lock);
+ /*
+ * We don't need to acquire p->p_lock here;
+ * we are manipulating thread-private data.
+ */
if (lwp->lwp_cursig || lwp->lwp_curinfo) {
- mutex_exit(&p->p_lock);
t->t_sig_check = 1;
error = EAGAIN;
goto bad;
@@ -272,8 +273,6 @@ sigresend(int sig, siginfo_t *siginfo, sigset_t *mask)
lwp->lwp_curinfo = sqp;
schedctl_finish_sigblock(t);
t->t_hold = kset;
- mutex_exit(&p->p_lock);
-
t->t_sig_check = 1;
return (0);
bad: