pfind() and the proc structure

Giorgos Keramidas keramida at ceid.upatras.gr
Tue Apr 1 11:08:35 PDT 2008


On Tue, 1 Apr 2008 07:23:58 -0700, "Rao, Nikhil" <nikhil.rao at intel.com> wrote:
> Ok, I should have caught that :-( Another question - Now that the
> PROC_LOCK on p is obtained the all_proc lock is released and the
> function returns, at this point can't the proc get deallocated ?
>
> Nikhil
>
> 242 struct proc *
> 243 pfind(pid)
> 244         register pid_t pid;
> 245 {
> 246         register struct proc *p;
> 247
> 248         sx_slock(&allproc_lock);
> 249         LIST_FOREACH(p, PIDHASH(pid), p_hash)
> 250                 if (p->p_pid == pid) {
> 251                         if (p->p_state == PRS_NEW) {
> 252                                 p = NULL;
> 253                                 break;
> 254                         }
> 255                         PROC_LOCK(p);
> 256                         break;
> 257                 }
> 258         sx_sunlock(&allproc_lock);
> 259         return (p);
> 260 }

Not until you unlock the specific proc entry.  You are holding a lock
for the specific proc entry, so anyone trying to `reap' the process
would have to wait until you are done with what you are doing.



More information about the freebsd-hackers mailing list