summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_fork.c4
-rw-r--r--sys/kern/tty.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index 8782007..ec959d5 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -538,6 +538,8 @@ again:
FILEDESC_UNLOCK(p1->p_fd);
} else
fd = fdshare(p1);
+ PGRPSESS_XLOCK();
+ PGRP_LOCK(p1->p_pgrp);
PROC_LOCK(p2);
p2->p_fd = fd;
@@ -570,6 +572,8 @@ again:
LIST_INSERT_AFTER(p1, p2, p_pglist);
PROC_UNLOCK(p1);
PROC_UNLOCK(p2);
+ PGRP_UNLOCK(p1->p_pgrp);
+ PGRPSESS_XUNLOCK();
/*
* Attach the new process to its parent.
diff --git a/sys/kern/tty.c b/sys/kern/tty.c
index 1214513..3b7739d 100644
--- a/sys/kern/tty.c
+++ b/sys/kern/tty.c
@@ -2419,13 +2419,13 @@ ttyinfo(tp)
PGRP_UNLOCK(tp->t_pgrp);
ttyprintf(tp, "empty foreground process group\n");
} else {
- PGRP_UNLOCK(tp->t_pgrp);
mtx_lock_spin(&sched_lock);
/* Pick interesting process. */
for (pick = NULL; p != 0; p = LIST_NEXT(p, p_pglist))
if (proc_compare(pick, p))
pick = p;
+ PGRP_UNLOCK(tp->t_pgrp);
td = FIRST_THREAD_IN_PROC(pick);
stmp = pick->p_stat == SRUN ? "running" : /* XXXKSE */
OpenPOWER on IntegriCloud