PERFORCE change 145362 for review
Ed Schouten
ed at FreeBSD.org
Thu Jul 17 13:30:45 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=145362
Change 145362 by ed at 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);
More information about the p4-projects
mailing list