On Sat, 19 Aug 2006, Alexander Leidinger wrote:
Quoting Robert Watson <[EMAIL PROTECTED]> (Fri, 18 Aug 2006 18:47:12 +0100
(BST)):
On Thu, 17 Aug 2006, Alexander Leidinger wrote:
- protect td->td_proc->p_pid with the proc lock in linux_getpid
in the amd64 (= non i386) case [1]
Is this necessary? In principle, td->td_proc is static for a live thread
bound to a process (i.e., in a system call, which the current thread
presumable is, as long as td == curthread), p_pid is static for a live
process that isn't exiting (so in a system call is not generally exiting).
The native FreeBSD getpid() only acquires the process lock when following
p_pptr, since this can change during a system call (i.e., as a result of
the parent dying, and the child being re-parented to init(8)).
Now that you tell me this, I have the impression that I have mixed up p_pid
with p_pptr here... I have to have a look at the code again.
In the general case, following many p->p_foo fields does require the process
lock, as the process might exit, etc, while you're accessing the fields. The
exception for curthread->td_proc relates to fields that are static as long as
the process isn't exiting. Fields with this property are marked with (b) in
the locking guide in proc.h.
Robert N M Watson
Computer Laboratory
University of Cambridge
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"