Date: Mon, 31 Mar 2008 23:03:31 -0700 From: "Rao, Nikhil" <nikhil.rao@intel.com> To: <freebsd-hackers@freebsd.org> Subject: pfind() and the proc structure Message-ID: <12A5C15467D5B94F8E0FF265D9498ADD02CBF8FF@orsmsx419.amr.corp.intel.com> In-Reply-To: <20080329120018.0A8F5106567F@hub.freebsd.org> References: <20080329120018.0A8F5106567F@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi List,
The pfind(..) (in kern_proc.c) function below returns the proc structure
for the PID passed in
Say the thread that calls pfind() gets blocked at PROC_LOCK(p) (line 255
below), in the meantime what prevents the process from exiting and
deallocating the proc structure ? Maybe I am missing something simple or
the answer requires knowledge of the mutex implementation.
Thanks,
Nikhil
242 struct proc *
243 pfind(pid)
244 register pid_t pid;
245 {
246 register struct proc *p;
247=20
248 sx_slock(&allproc_lock);
249 LIST_FOREACH(p, PIDHASH(pid), p_hash)
250 if (p->p_pid =3D=3D pid) {
251 if (p->p_state =3D=3D PRS_NEW) {
252 p =3D NULL;
253 break;
254 }
255 PROC_LOCK(p);
256 break;
257 }
258 sx_sunlock(&allproc_lock);
259 return (p);
260 }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?12A5C15467D5B94F8E0FF265D9498ADD02CBF8FF>
