Index: kern_fork.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_fork.c,v retrieving revision 1.257 diff -u -r1.257 kern_fork.c --- kern_fork.c 8 Feb 2006 08:09:16 -0000 1.257 +++ kern_fork.c 15 Mar 2006 07:19:27 -0000 @@ -220,6 +220,16 @@ * certain parts of a process from itself. */ if ((flags & RFPROC) == 0) { + if ((p1->p_flag & P_HADTHREADS) && + (flags & (RFCFDG | RFFDG))) { + PROC_LOCK(p1); + if (thread_single(SINGLE_BOUNDARY)) { + PROC_UNLOCK(p1); + return (ERESTART); + } + PROC_UNLOCK(p1); + } + vm_forkproc(td, NULL, NULL, flags); /* @@ -237,6 +247,13 @@ */ if (flags & RFFDG) fdunshare(p1, td); + + if ((p1->p_flag & P_HADTHREADS) && + (flags & (RFCFDG | RFFDG))) { + PROC_LOCK(p1); + thread_single_end(); + PROC_UNLOCK(p1); + } *procp = NULL; return (0); }