MCPcopy Create free account
hub / github.com/F-Stack/f-stack / doenterpgrp

Function doenterpgrp

freebsd/kern/kern_proc.c:718–748  ·  view source on GitHub ↗

* Move p to a process group */

Source from the content-addressed store, hash-verified

716 * Move p to a process group
717 */
718static void
719doenterpgrp(struct proc *p, struct pgrp *pgrp)
720{
721 struct pgrp *savepgrp;
722 struct proc *pp;
723
724 sx_assert(&proctree_lock, SX_XLOCKED);
725 PROC_LOCK_ASSERT(p, MA_NOTOWNED);
726 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED);
727 PGRP_LOCK_ASSERT(p->p_pgrp, MA_NOTOWNED);
728 SESS_LOCK_ASSERT(p->p_session, MA_NOTOWNED);
729
730 savepgrp = p->p_pgrp;
731 pp = jobc_parent(p, NULL);
732
733 PGRP_LOCK(pgrp);
734 PGRP_LOCK(savepgrp);
735 if (isjobproc(pp, savepgrp) && pgrp_calc_jobc(savepgrp) == 1)
736 orphanpg(savepgrp);
737 PROC_LOCK(p);
738 LIST_REMOVE(p, p_pglist);
739 p->p_pgrp = pgrp;
740 PROC_UNLOCK(p);
741 LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist);
742 if (isjobproc(pp, pgrp))
743 pgrp->pg_flags &= ~PGRP_ORPHANED;
744 PGRP_UNLOCK(savepgrp);
745 PGRP_UNLOCK(pgrp);
746 if (LIST_EMPTY(&savepgrp->pg_members))
747 pgdelete(savepgrp);
748}
749
750/*
751 * remove process from process group

Callers 2

enterpgrpFunction · 0.85
enterthispgrpFunction · 0.85

Calls 5

jobc_parentFunction · 0.85
isjobprocFunction · 0.85
pgrp_calc_jobcFunction · 0.85
orphanpgFunction · 0.85
pgdeleteFunction · 0.85

Tested by

no test coverage detected