From owner-p4-projects@FreeBSD.ORG Wed Aug 16 16:46:31 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7AF4716A4E0; Wed, 16 Aug 2006 16:46:31 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 3AC9B16A4E7 for ; Wed, 16 Aug 2006 16:46:31 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 87AF443E78 for ; Wed, 16 Aug 2006 16:44:53 +0000 (GMT) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k7GGiXgU088960 for ; Wed, 16 Aug 2006 16:44:33 GMT (envelope-from rdivacky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k7GGiXqw088955 for perforce@freebsd.org; Wed, 16 Aug 2006 16:44:33 GMT (envelope-from rdivacky@FreeBSD.org) Date: Wed, 16 Aug 2006 16:44:33 GMT Message-Id: <200608161644.k7GGiXqw088955@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rdivacky@FreeBSD.org using -f From: Roman Divacky To: Perforce Change Reviews Cc: Subject: PERFORCE change 104259 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Aug 2006 16:46:31 -0000 http://perforce.freebsd.org/chv.cgi?CH=104259 Change 104259 by rdivacky@rdivacky_witten on 2006/08/16 16:44:09 Lock proc and rework getppid(). Affected files ... .. //depot/projects/soc2006/rdivacky_linuxolator/compat/linux/linux_misc.c#20 edit Differences ... ==== //depot/projects/soc2006/rdivacky_linuxolator/compat/linux/linux_misc.c#20 (text+ko) ==== @@ -1340,8 +1340,11 @@ KASSERT(em != NULL, ("getpid: emuldata not found.\n")); td->td_retval[0] = em->shared->group_pid; EMUL_UNLOCK(&emul_lock); - } else + } else { + PROC_LOCK(td->td_proc); td->td_retval[0] = td->td_proc->p_pid; + PROC_UNLOCK(td->td_proc); + } return (0); } @@ -1365,6 +1368,14 @@ struct proc *p, *pp; char osrel[LINUX_MAX_UTSNAME]; + linux_get_osrelease(td, osrel); + if (strlen(osrel) >= 3 && osrel[2] != '6') { + PROC_LOCK(td->td_proc); + td->td_retval[0] = td->td_proc->p_pptr->p_pid; + PROC_UNLOCK(td->td_proc); + return (0); + } + em = em_find(td->td_proc, EMUL_UNLOCKED); KASSERT(em != NULL, ("getppid: process emuldata not found.\n")); @@ -1388,11 +1399,7 @@ em = em_find(pp, EMUL_LOCKED); KASSERT(em != NULL, ("getppid: parent emuldata not found.\n")); - linux_get_osrelease(td, osrel); - if (strlen(osrel) >= 3 && osrel[2] == '6') - td->td_retval[0] = em->shared->group_pid; - else - td->td_retval[0] = td->td_proc->p_pptr->p_pid; + td->td_retval[0] = em->shared->group_pid; } else td->td_retval[0] = pp->p_pid;