From 7de3393e3983036f1e8c46322ea7c820bd31a363 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Thu, 21 Dec 1995 16:45:27 +0000 Subject: (free_session): Correctly get rid of the receive right we're holding. (S_proc_getsidport): Add and use new arg sessport_type. Return errors. --- proc/pgrp.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'proc/pgrp.c') diff --git a/proc/pgrp.c b/proc/pgrp.c index 0601bb64..5af36aeb 100644 --- a/proc/pgrp.c +++ b/proc/pgrp.c @@ -76,7 +76,7 @@ free_session (struct session *s) { if (s->s_sessionid) mach_port_mod_refs (mach_task_self (), s->s_sessionid, - MACH_PORT_RIGHT_RECEIVE, 1); + MACH_PORT_RIGHT_RECEIVE, -1); remove_session_from_hash (s); free (s); } @@ -260,18 +260,20 @@ S_proc_getpgrppids (struct proc *callerp, /* Implement proc_getsidport as described in . */ kern_return_t S_proc_getsidport (struct proc *p, - mach_port_t *sessport) + mach_port_t *sessport, mach_msg_type_name_t *sessport_type) { + error_t err = 0; if (!p->p_pgrp) *sessport = MACH_PORT_NULL; else { - if (!p->p_pgrp->pg_session->s_sessionid) - mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE, - &p->p_pgrp->pg_session->s_sessionid); + if (p->p_pgrp->pg_session->s_sessionid == MACH_PORT_NULL) + err = mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE, + &p->p_pgrp->pg_session->s_sessionid); *sessport = p->p_pgrp->pg_session->s_sessionid; } - return 0; + *sessport_type = MACH_MSG_TYPE_MAKE_SEND_ONCE; + return err; } /* Implement proc_setpgrp as described in . */ -- cgit v1.2.3