svn commit: r272560 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Sun Oct 5 07:21:42 UTC 2014
Author: mjg
Date: Sun Oct 5 07:21:41 2014
New Revision: 272560
URL: https://svnweb.freebsd.org/changeset/base/272560
Log:
Avoid unnecessary ppeers_lock acquisition in exit1.
MFC after: 1 week
Modified:
head/sys/kern/kern_exit.c
Modified: head/sys/kern/kern_exit.c
==============================================================================
--- head/sys/kern/kern_exit.c Sun Oct 5 06:28:53 2014 (r272559)
+++ head/sys/kern/kern_exit.c Sun Oct 5 07:21:41 2014 (r272560)
@@ -265,8 +265,8 @@ exit1(struct thread *td, int rv)
AUDIT_SYSCALL_EXIT(0, td);
#endif
- /* Are we a task leader? */
- if (p == p->p_leader) {
+ /* Are we a task leader with peers? */
+ if (p->p_peers != NULL && p == p->p_leader) {
mtx_lock(&ppeers_lock);
q = p->p_peers;
while (q != NULL) {
@@ -337,15 +337,17 @@ exit1(struct thread *td, int rv)
/*
* Remove ourself from our leader's peer list and wake our leader.
*/
- mtx_lock(&ppeers_lock);
- if (p->p_leader->p_peers) {
- q = p->p_leader;
- while (q->p_peers != p)
- q = q->p_peers;
- q->p_peers = p->p_peers;
- wakeup(p->p_leader);
+ if (p->p_leader->p_peers != NULL) {
+ mtx_lock(&ppeers_lock);
+ if (p->p_leader->p_peers != NULL) {
+ q = p->p_leader;
+ while (q->p_peers != p)
+ q = q->p_peers;
+ q->p_peers = p->p_peers;
+ wakeup(p->p_leader);
+ }
+ mtx_unlock(&ppeers_lock);
}
- mtx_unlock(&ppeers_lock);
vmspace_exit(td);
More information about the svn-src-head
mailing list