Author: mjg
Date: Mon Sep  2 12:46:43 2019
New Revision: 351697
URL: https://svnweb.freebsd.org/changeset/base/351697

Log:
  proc: clear pid bitmap entry after dropping proctree lock
  
  There is no correctness change here, but the procid lock is contended in
  the fork path and taking it while holding proctree avoidably extends its
  hold time.
  
  Note that there are other ids which can end up getting cleared with the
  lock.
  
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/kern/kern_exit.c

Modified: head/sys/kern/kern_exit.c
==============================================================================
--- head/sys/kern/kern_exit.c   Mon Sep  2 11:04:17 2019        (r351696)
+++ head/sys/kern/kern_exit.c   Mon Sep  2 12:46:43 2019        (r351697)
@@ -906,7 +906,6 @@ proc_reap(struct thread *td, struct proc *p, int *stat
        LIST_REMOVE(p, p_sibling);
        reaper_abandon_children(p, true);
        reaper_clear(p);
-       proc_id_clear(PROC_ID_PID, p->p_pid);
        PROC_LOCK(p);
        proc_clear_orphan(p);
        PROC_UNLOCK(p);
@@ -914,6 +913,8 @@ proc_reap(struct thread *td, struct proc *p, int *stat
        if (p->p_procdesc != NULL)
                procdesc_reap(p);
        sx_xunlock(&proctree_lock);
+
+       proc_id_clear(PROC_ID_PID, p->p_pid);
 
        PROC_LOCK(p);
        knlist_detach(p->p_klist);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to