Module Name: src Committed By: pooka Date: Wed Apr 16 22:34:02 UTC 2014
Modified Files: src/sys/rump/librump/rumpkern: lwproc.c Log Message: Reparent children of a dying lwproc. Fixes wpa_supplicant -B (and most likely a bunch of other things). To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/rump/librump/rumpkern/lwproc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/rump/librump/rumpkern/lwproc.c diff -u src/sys/rump/librump/rumpkern/lwproc.c:1.29 src/sys/rump/librump/rumpkern/lwproc.c:1.30 --- src/sys/rump/librump/rumpkern/lwproc.c:1.29 Wed Apr 9 23:53:36 2014 +++ src/sys/rump/librump/rumpkern/lwproc.c Wed Apr 16 22:34:02 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: lwproc.c,v 1.29 2014/04/09 23:53:36 pooka Exp $ */ +/* $NetBSD: lwproc.c,v 1.30 2014/04/16 22:34:02 pooka Exp $ */ /* * Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved. @@ -28,7 +28,7 @@ #define RUMP__CURLWP_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.29 2014/04/09 23:53:36 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.30 2014/04/16 22:34:02 pooka Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -83,6 +83,7 @@ static void lwproc_proc_free(struct proc *p) { kauth_cred_t cred; + struct proc *child; KASSERT(p->p_stat == SDYING || p->p_stat == SDEAD); @@ -96,6 +97,14 @@ lwproc_proc_free(struct proc *p) mutex_enter(proc_lock); + /* childranee eunt initus */ + while ((child = LIST_FIRST(&p->p_children)) != NULL) { + LIST_REMOVE(child, p_sibling); + child->p_pptr = initproc; + child->p_ppid = 1; + LIST_INSERT_HEAD(&initproc->p_children, child, p_sibling); + } + KASSERT(p->p_nlwps == 0); KASSERT(LIST_EMPTY(&p->p_lwps));