summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_fork.c
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2011-11-05 23:02:37 +0000
committerguenther <guenther@openbsd.org>2011-11-05 23:02:37 +0000
commiteee814dc5a5b66080fd37d80e64bc915ef82f47f (patch)
tree846d4a15429a318a820a898c29bce1a5ae1b8e59 /sys/kern/kern_fork.c
parentMore effort to use filesystem time if the rtc doesn't exist, thanks miod. (diff)
downloadwireguard-openbsd-eee814dc5a5b66080fd37d80e64bc915ef82f47f.tar.xz
wireguard-openbsd-eee814dc5a5b66080fd37d80e64bc915ef82f47f.zip
I had moved earlier the adding of processes to the pgrp and children lists
during the big rework at c2k10, but it's too early as signals can be posted before the process is fully built. Move those list adds back down to the late stage they were before. Problem seen on sebastia@'s sparc. ok deraadt@ miod@
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r--sys/kern/kern_fork.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index 39c2249638b..e8bd9e85326 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_fork.c,v 1.129 2011/10/15 23:35:29 guenther Exp $ */
+/* $OpenBSD: kern_fork.c,v 1.130 2011/11/05 23:02:37 guenther Exp $ */
/* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */
/*
@@ -200,9 +200,7 @@ process_new(struct proc *newproc, struct proc *parentproc)
TAILQ_INIT(&pr->ps_threads);
TAILQ_INSERT_TAIL(&pr->ps_threads, newproc, p_thr_link);
- LIST_INSERT_AFTER(parent, pr, ps_pglist);
pr->ps_pptr = parent;
- LIST_INSERT_HEAD(&parent->ps_children, pr, ps_sibling);
LIST_INIT(&pr->ps_children);
pr->ps_refcnt = 1;
@@ -442,6 +440,10 @@ fork1(struct proc *p1, int exitsig, int flags, void *stack, pid_t *tidptr,
LIST_INSERT_HEAD(&allproc, p2, p_list);
LIST_INSERT_HEAD(PIDHASH(p2->p_pid), p2, p_hash);
+ if ((flags & FORK_THREAD) == 0) {
+ LIST_INSERT_AFTER(p1->p_p, p2->p_p, ps_pglist);
+ LIST_INSERT_HEAD(&p1->p_p->ps_children, p2->p_p, ps_sibling);
+ }
if (p2->p_flag & P_TRACED) {
p2->p_oppid = p1->p_pid;