summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_prot.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2003-04-25 20:09:31 +0000
committerjhb <jhb@FreeBSD.org>2003-04-25 20:09:31 +0000
commit942b3c3db77fca77b64bdc7b2724b480f54c5ad5 (patch)
tree3411f740d90a932419216355385c634e9154bb77 /sys/kern/kern_prot.c
parentc90ae13a7640a7d224108fb3d146ed5a8cf4275b (diff)
downloadFreeBSD-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.c58
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_
OpenPOWER on IntegriCloud