From a4ad237eaa665b78919b8ff019591629b59df5e9 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 13 Dec 2000 00:17:05 +0000 Subject: - Change the allproc_lock to use a macro, ALLPROC_LOCK(how), instead of explicit calls to lockmgr. Also provides macros for the flags pased to specify shared, exclusive or release which map to the lockmgr flags. This is so that the use of lockmgr can be easily replaced with optimized reader-writer locks. - Add some locking that I missed the first time. --- sys/kern/kern_proc.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'sys/kern/kern_proc.c') diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 793c068..814a29e 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -122,11 +122,11 @@ pfind(pid) { register struct proc *p; - lockmgr(&allproc_lock, LK_SHARED, NULL, CURPROC); + ALLPROC_LOCK(AP_SHARED); LIST_FOREACH(p, PIDHASH(pid), p_hash) if (p->p_pid == pid) break; - lockmgr(&allproc_lock, LK_RELEASE, NULL, CURPROC); + ALLPROC_LOCK(AP_RELEASE); return (p); } @@ -478,10 +478,12 @@ zpfind(pid_t pid) { struct proc *p; + ALLPROC_LOCK(AP_SHARED); LIST_FOREACH(p, &zombproc, p_list) if (p->p_pid == pid) - return (p); - return (NULL); + break; + ALLPROC_LOCK(AP_RELEASE); + return (p); } @@ -536,7 +538,7 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) if (error) return (error); } - lockmgr(&allproc_lock, LK_SHARED, NULL, CURPROC); + ALLPROC_LOCK(AP_SHARED); for (doingzomb=0 ; doingzomb < 2 ; doingzomb++) { if (!doingzomb) p = LIST_FIRST(&allproc); @@ -593,13 +595,12 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) error = sysctl_out_proc(p, req, doingzomb); if (error) { - lockmgr(&allproc_lock, LK_RELEASE, NULL, - CURPROC); + ALLPROC_LOCK(AP_RELEASE); return (error); } } } - lockmgr(&allproc_lock, LK_RELEASE, NULL, CURPROC); + ALLPROC_LOCK(AP_RELEASE); return (0); } -- cgit v1.1