svn commit: r270084 - stable/10/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Sun Aug 17 06:52:36 UTC 2014
Author: mjg
Date: Sun Aug 17 06:52:35 2014
New Revision: 270084
URL: http://svnweb.freebsd.org/changeset/base/270084
Log:
MFC r268074:
Perform a lockless check in sigacts_shared.
It is used only during execve (i.e. singlethreaded), so there is no fear
of returning 'not shared' which soon becomes 'shared'.
While here reorganize the code a little to avoid proc lock/unlock in
shared case.
Modified:
stable/10/sys/kern/kern_exec.c
stable/10/sys/kern/kern_sig.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/kern/kern_exec.c
==============================================================================
--- stable/10/sys/kern/kern_exec.c Sun Aug 17 06:28:57 2014 (r270083)
+++ stable/10/sys/kern/kern_exec.c Sun Aug 17 06:52:35 2014 (r270084)
@@ -624,18 +624,17 @@ interpret:
* handlers. In execsigs(), the new process will have its signals
* reset.
*/
- PROC_LOCK(p);
- oldcred = crcopysafe(p, newcred);
if (sigacts_shared(p->p_sigacts)) {
oldsigacts = p->p_sigacts;
- PROC_UNLOCK(p);
newsigacts = sigacts_alloc();
sigacts_copy(newsigacts, oldsigacts);
- PROC_LOCK(p);
- p->p_sigacts = newsigacts;
} else
oldsigacts = NULL;
+ PROC_LOCK(p);
+ if (oldsigacts)
+ p->p_sigacts = newsigacts;
+ oldcred = crcopysafe(p, newcred);
/* Stop profiling */
stopprofclock(p);
Modified: stable/10/sys/kern/kern_sig.c
==============================================================================
--- stable/10/sys/kern/kern_sig.c Sun Aug 17 06:28:57 2014 (r270083)
+++ stable/10/sys/kern/kern_sig.c Sun Aug 17 06:52:35 2014 (r270084)
@@ -3463,10 +3463,6 @@ sigacts_copy(struct sigacts *dest, struc
int
sigacts_shared(struct sigacts *ps)
{
- int shared;
- mtx_lock(&ps->ps_mtx);
- shared = ps->ps_refcnt > 1;
- mtx_unlock(&ps->ps_mtx);
- return (shared);
+ return (ps->ps_refcnt > 1);
}
More information about the svn-src-stable
mailing list