Index: kern_prot.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_prot.c,v retrieving revision 1.59 diff -u -r1.59 kern_prot.c --- kern_prot.c 2000/06/22 22:27:15 1.59 +++ kern_prot.c 2000/10/04 07:34:24 @@ -91,8 +91,20 @@ struct proc *p; struct getppid_args *uap; { + struct proc *parent; + pid_t pid; - p->p_retval[0] = p->p_pptr->p_pid; + parent = p->p_pptr; + pid = parent->p_pid; + for (;;) { + __asm __volatile("" : : : "memory"); /* a gcc mb(); */ + if (parent == p->p_pptr) + break; + /* else we lost a race and got reparented */ + parent = p->p_pptr; + pid = parent->p_pid; + } + p->p_retval[0] = (register_t)pid; return (0); }