From c8f645deb2eb00d721fe17344dd327bde5701b4a Mon Sep 17 00:00:00 2001 From: "Michael I. Bushnell" Date: Wed, 20 Mar 1996 18:41:43 +0000 Subject: (ports_destroy_right): Don't do anything if port has already been destroyed. --- libports/destroy-right.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'libports') diff --git a/libports/destroy-right.c b/libports/destroy-right.c index 907e64d7..704c0f57 100644 --- a/libports/destroy-right.c +++ b/libports/destroy-right.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 1996 Free Software Foundation, Inc. Written by Michael I. Bushnell. This file is part of the GNU Hurd. @@ -29,19 +29,22 @@ ports_destroy_right (void *portstruct) struct port_info *pi = portstruct; error_t err; - mutex_lock (&_ports_lock); - ihash_locp_remove (pi->bucket->htable, pi->hentry); - err = mach_port_mod_refs (mach_task_self (), pi->port_right, - MACH_PORT_RIGHT_RECEIVE, -1); - assert_perror (err); - mutex_unlock (&_ports_lock); - - pi->port_right = MACH_PORT_NULL; - - if (pi->flags & PORT_HAS_SENDRIGHTS) + if (pi->port_right != MACH_PORT_NULL) { - pi->flags &= ~PORT_HAS_SENDRIGHTS; - ports_port_deref (pi); + mutex_lock (&_ports_lock); + ihash_locp_remove (pi->bucket->htable, pi->hentry); + err = mach_port_mod_refs (mach_task_self (), pi->port_right, + MACH_PORT_RIGHT_RECEIVE, -1); + assert_perror (err); + mutex_unlock (&_ports_lock); + + pi->port_right = MACH_PORT_NULL; + + if (pi->flags & PORT_HAS_SENDRIGHTS) + { + pi->flags &= ~PORT_HAS_SENDRIGHTS; + ports_port_deref (pi); + } } } -- cgit v1.2.3