In article <201405040936.21907.m...@ecs.vuw.ac.nz>, Mark Davies <m...@ecs.vuw.ac.nz> wrote: >On Thu, 24 Apr 2014 07:18:10 David Laight wrote: >> > To fix, this should be added somewhere, probably at >> > sys/kern/kern_exit.c:487 (but I'm not sure if there's a better >> > location): >> > if ((l->l_pflag & LP_PIDLID) != 0 && l->l_lid != p->p_pid) { >> > >> > proc_free_pid(l->l_lid); >> > >> > } >> >> That doesn't look like the right place. >> I think it should be further down (and with proc_lock held). > >So can someone suggest where exactly the patch should go. And isn't proc_lock >held at this point (entered at line 344, exit at line 569)?
How about this? christos Index: kern_exit.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_exit.c,v retrieving revision 1.243 diff -u -u -r1.243 kern_exit.c --- kern_exit.c 9 Jun 2013 01:13:47 -0000 1.243 +++ kern_exit.c 4 May 2014 21:26:00 -0000 @@ -541,12 +541,10 @@ */ pcu_discard_all(l); - /* - * Remaining lwp resources will be freed in lwp_exit2() once we've - * switch to idle context; at that point, we will be marked as a - * full blown zombie. - */ mutex_enter(p->p_lock); + /* Free the linux lwp id */ + if ((l->l_pflag & LP_PIDLID) != 0 && l->l_lid != p->p_pid) + proc_free_pid(l->l_lid); lwp_drainrefs(l); lwp_lock(l); l->l_prflag &= ~LPR_DETACHED;