diff options
-rw-r--r-- | sys/kern/kern_proc.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index a7386b2..e7b3460 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -401,6 +401,7 @@ doenterpgrp(p, pgrp) fixjobc(p, pgrp, 1); fixjobc(p, p->p_pgrp, 0); + mtx_lock(&Giant); /* XXX TTY */ PGRP_LOCK(pgrp); PGRP_LOCK(savepgrp); PROC_LOCK(p); @@ -410,6 +411,7 @@ doenterpgrp(p, pgrp) LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist); PGRP_UNLOCK(savepgrp); PGRP_UNLOCK(pgrp); + mtx_unlock(&Giant); /* XXX TTY */ if (LIST_EMPTY(&savepgrp->pg_members)) pgdelete(savepgrp); } @@ -425,12 +427,14 @@ leavepgrp(p) sx_assert(&proctree_lock, SX_XLOCKED); savepgrp = p->p_pgrp; + mtx_lock(&Giant); /* XXX TTY */ PGRP_LOCK(savepgrp); PROC_LOCK(p); LIST_REMOVE(p, p_pglist); p->p_pgrp = NULL; PROC_UNLOCK(p); PGRP_UNLOCK(savepgrp); + mtx_unlock(&Giant); /* XXX TTY */ if (LIST_EMPTY(&savepgrp->pg_members)) pgdelete(savepgrp); return (0); @@ -455,6 +459,7 @@ pgdelete(pgrp) */ funsetownlst(&pgrp->pg_sigiolst); + mtx_lock(&Giant); /* XXX TTY */ PGRP_LOCK(pgrp); if (pgrp->pg_session->s_ttyp != NULL && pgrp->pg_session->s_ttyp->t_pgrp == pgrp) @@ -465,6 +470,7 @@ pgdelete(pgrp) PGRP_UNLOCK(pgrp); mtx_destroy(&pgrp->pg_mtx); FREE(pgrp, M_PGRP); + mtx_unlock(&Giant); /* XXX TTY */ } static void |