diff options
author | jhb <jhb@FreeBSD.org> | 2003-04-25 20:09:31 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2003-04-25 20:09:31 +0000 |
commit | 942b3c3db77fca77b64bdc7b2724b480f54c5ad5 (patch) | |
tree | 3411f740d90a932419216355385c634e9154bb77 /sys/kern/kern_prot.c | |
parent | c90ae13a7640a7d224108fb3d146ed5a8cf4275b (diff) | |
download | FreeBSD-src-942b3c3db77fca77b64bdc7b2724b480f54c5ad5.zip FreeBSD-src-942b3c3db77fca77b64bdc7b2724b480f54c5ad5.tar.gz |
Remove Giant from getpgid() and getsid() and tweak the logic to more
closely match that of 4.x.
Diffstat (limited to 'sys/kern/kern_prot.c')
-rw-r--r-- | sys/kern/kern_prot.c | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c index 0279137..b953553 100644 --- a/sys/kern/kern_prot.c +++ b/sys/kern/kern_prot.c @@ -148,26 +148,25 @@ struct getpgid_args { int getpgid(struct thread *td, struct getpgid_args *uap) { - struct proc *p = td->td_proc; - struct proc *pt; + struct proc *p; int error; - mtx_lock(&Giant); - error = 0; if (uap->pid == 0) { + p = td->td_proc; PROC_LOCK(p); - td->td_retval[0] = p->p_pgrp->pg_id; - PROC_UNLOCK(p); - } else if ((pt = pfind(uap->pid)) == NULL) - error = ESRCH; - else { - error = p_cansee(td, pt); - if (error == 0) - td->td_retval[0] = pt->p_pgrp->pg_id; - PROC_UNLOCK(pt); + } else { + p = pfind(uap->pid); + if (p == NULL) + return (ESRCH); + error = p_cansee(td, p); + if (error) { + PROC_UNLOCK(p); + return (error); + } } - mtx_unlock(&Giant); - return (error); + td->td_retval[0] = p->p_pgrp->pg_id; + PROC_UNLOCK(p); + return (0); } /* @@ -184,26 +183,25 @@ struct getsid_args { int getsid(struct thread *td, struct getsid_args *uap) { - struct proc *p = td->td_proc; - struct proc *pt; + struct proc *p; int error; - mtx_lock(&Giant); - error = 0; if (uap->pid == 0) { + p = td->td_proc; PROC_LOCK(p); - td->td_retval[0] = p->p_session->s_sid; - PROC_UNLOCK(p); - } else if ((pt = pfind(uap->pid)) == NULL) - error = ESRCH; - else { - error = p_cansee(td, pt); - if (error == 0) - td->td_retval[0] = pt->p_session->s_sid; - PROC_UNLOCK(pt); + } else { + p = pfind(uap->pid); + if (p == NULL) + return (ESRCH); + error = p_cansee(td, p); + if (error) { + PROC_UNLOCK(p); + return (error); + } } - mtx_unlock(&Giant); - return (error); + td->td_retval[0] = p->p_session->s_sid; + PROC_UNLOCK(p); + return (0); } #ifndef _SYS_SYSPROTO_H_ |