On Fri, Nov 16, 2012 at 08:25:06AM +0000, Konstantin Belousov wrote:
> Author: kib
> Date: Fri Nov 16 08:25:06 2012
> New Revision: 243142
> URL: http://svnweb.freebsd.org/changeset/base/243142
> 
> Log:
>   In pget(9), if PGET_NOTWEXIT flag is not specified, also search the
>   zombie list for the pid. This allows several kern.proc sysctls to
>   report useful information for zombies.
>   
>   Hold the allproc_lock around all searches instead of relocking it.
>   Remove private pfind_locked() from the new nfs client code.
>   
>   Requested and reviewed by:  pjd
>   Tested by:  pho
>   MFC after:  3 weeks
[...]
> @@ -364,12 +374,16 @@ pget(pid_t pid, int flags, struct proc *
>       struct proc *p;
>       int error;
>  
> +     sx_slock(&allproc_lock);
>       if (pid <= PID_MAX)
> -             p = pfind(pid);
> +             p = pfind_locked(pid);
>       else if ((flags & PGET_NOTID) == 0)
> -             p = pfind_tid(pid);
> +             p = pfind_tid_locked(pid);
>       else
>               p = NULL;
> +     if (p == NULL && (flags & PGET_NOTWEXIT) == 0)
> +             p = zpfind_locked(pid);
> +     sx_sunlock(&allproc_lock);
>       if (p == NULL)
>               return (ESRCH);

I think we should move zpfind_locked() under 'pid <= PID_MAX':

        sx_slock(&allproc_lock);
        if (pid <= PID_MAX) {
                p = pfind_locked(pid);
                if (p == NULL && (flags & PGET_NOTWEXIT) == 0)
                        p = zpfind_locked(pid);
        } else if ((flags & PGET_NOTID) == 0) {
                p = pfind_tid_locked(pid);
        } else {
                p = NULL;
        }
        sx_sunlock(&allproc_lock);
        if (p == NULL)
                return (ESRCH);

-- 
Pawel Jakub Dawidek                       http://www.wheelsystems.com
FreeBSD committer                         http://www.FreeBSD.org
Am I Evil? Yes, I Am!                     http://tupytaj.pl

Attachment: pgpws7X3zEMAu.pgp
Description: PGP signature

Reply via email to