From owner-p4-projects@FreeBSD.ORG Thu Jul 17 13:30:45 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0CD7D1065731; Thu, 17 Jul 2008 13:30:44 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 16B931065676 for ; Thu, 17 Jul 2008 13:30:44 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0CD988FC26 for ; Thu, 17 Jul 2008 13:30:44 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m6HDUhEi058839 for ; Thu, 17 Jul 2008 13:30:43 GMT (envelope-from ed@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.2/8.14.1/Submit) id m6HDUh8r058837 for perforce@freebsd.org; Thu, 17 Jul 2008 13:30:43 GMT (envelope-from ed@FreeBSD.org) Date: Thu, 17 Jul 2008 13:30:43 GMT Message-Id: <200807171330.m6HDUh8r058837@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to ed@FreeBSD.org using -f From: Ed Schouten To: Perforce Change Reviews Cc: Subject: PERFORCE change 145362 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: Thu, 17 Jul 2008 13:30:45 -0000 http://perforce.freebsd.org/chv.cgi?CH=145362 Change 145362 by ed@ed_dull on 2008/07/17 13:30:21 Revert the changes to pgfind(). We should fix this somewhere in the far future, if we would decompose proctree_lock. Affected files ... .. //depot/projects/mpsafetty/share/man/man9/Makefile#2 edit .. //depot/projects/mpsafetty/share/man/man9/pgfind.9#2 edit .. //depot/projects/mpsafetty/sys/kern/kern_proc.c#2 edit .. //depot/projects/mpsafetty/sys/kern/tty.c#3 edit Differences ... ==== //depot/projects/mpsafetty/share/man/man9/Makefile#2 (text+ko) ==== @@ -884,7 +884,6 @@ pfil.9 pfil_hook_get.9 \ pfil.9 pfil_remove_hook.9 MLINKS+=pfind.9 zpfind.9 -MLINKS+=pgfind.9 pgfind_unlocked.9 MLINKS+=pmap_clear_modify.9 pmap_clear_reference.9 MLINKS+=pmap_copy.9 pmap_copy_page.9 MLINKS+=pmap_extract.9 pmap_extract_and_hold.9 ==== //depot/projects/mpsafetty/share/man/man9/pgfind.9#2 (text+ko) ==== @@ -35,8 +35,6 @@ .In sys/proc.h .Ft "struct pgrp *" .Fn pgfind "pid_t pgid" -.Ft "struct pgrp *" -.Fn pgfind_unlocked "pid_t pgid" .Sh DESCRIPTION The .Fn pgfind @@ -51,9 +49,7 @@ .Fn pgfind locks the .Vt pgrp -structure that is returned, while -.Fn pgfind_unlocked -does not. +structure that is returned. .Sh RETURN VALUES The .Fn pgfind ==== //depot/projects/mpsafetty/sys/kern/kern_proc.c#2 (text+ko) ==== @@ -301,7 +301,7 @@ * The caller must hold proctree_lock. */ struct pgrp * -pgfind_unlocked(pgid) +pgfind(pgid) register pid_t pgid; { register struct pgrp *pgrp; @@ -309,30 +309,15 @@ sx_assert(&proctree_lock, SX_LOCKED); LIST_FOREACH(pgrp, PGRPHASH(pgid), pg_hash) { - if (pgrp->pg_id == pgid) + if (pgrp->pg_id == pgid) { + PGRP_LOCK(pgrp); return (pgrp); + } } return (NULL); } /* - * Same as pgfind_unlocked(), but acquires the lock on the process - * group. - */ -struct pgrp * -pgfind(pgid) - register pid_t pgid; -{ - register struct pgrp *pgrp; - - pgrp = pgfind_unlocked(pgid); - if (pgrp != NULL) - PGRP_LOCK(pgrp); - - return (pgrp); -} - -/* * Create a new process group. * pgid must be equal to the pid of p. * Begin a new session if required. ==== //depot/projects/mpsafetty/sys/kern/tty.c#3 (text+ko) ==== @@ -1438,12 +1438,15 @@ struct pgrp *pg; /* - * Temporarily unlock the TTY to locate the process - * group. + * XXX: Temporarily unlock the TTY to locate the process + * group. This code would be lot nicer if we would ever + * decompose proctree_lock. */ tty_unlock(tp); sx_slock(&proctree_lock); - pg = pgfind_unlocked(*(int *)data); + pg = pgfind(*(int *)data); + if (pg != NULL) + PGRP_UNLOCK(pg); if (pg == NULL || pg->pg_session != td->td_proc->p_session) { sx_sunlock(&proctree_lock); tty_lock(tp);