From 09a3452b870e392feb54614efa131d16b4633c01 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Sat, 27 Jan 1996 17:20:16 +0000 Subject: (ports_intern_external_port): Call ports_import_port. --- libports/intern-external-port.c | 77 ++++------------------------------------- 1 file changed, 6 insertions(+), 71 deletions(-) (limited to 'libports/intern-external-port.c') diff --git a/libports/intern-external-port.c b/libports/intern-external-port.c index c62a2744..d6182188 100644 --- a/libports/intern-external-port.c +++ b/libports/intern-external-port.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. @@ -19,80 +19,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "ports.h" -#include -#include -#include -#include +/* Backward compatibility. */ void *ports_intern_external_port (struct port_bucket *bucket, mach_port_t port, size_t size, struct port_class *class) { - error_t err; - mach_port_status_t stat; - struct port_info *pi; - mach_port_t foo; - - err = mach_port_get_receive_status (mach_task_self (), port, &stat); - assert_perror (err); - - if (size < sizeof (struct port_info)) - size = sizeof (struct port_info); - - pi = malloc (size); - assert (pi); - - pi->class = class; - pi->refcnt = 1 + !!stat.mps_srights; - pi->weakrefcnt = 0; - pi->cancel_threshhold = 0; - pi->mscount = stat.mps_mscount; - pi->flags = stat.mps_srights ? PORT_HAS_SENDRIGHTS : 0; - pi->port_right = port; - pi->current_rpcs = 0; - pi->bucket = bucket; - - mutex_lock (&_ports_lock); - - loop: - if (class->flags & PORT_CLASS_NO_ALLOC) - { - class->flags |= PORT_CLASS_ALLOC_WAIT; - condition_wait (&_ports_block, &_ports_lock); - goto loop; - } - if (bucket->flags & PORT_BUCKET_NO_ALLOC) - { - bucket->flags |= PORT_BUCKET_ALLOC_WAIT; - condition_wait (&_ports_block, &_ports_lock); - goto loop; - } - - err = ihash_add (bucket->htable, port, pi, &pi->hentry); - assert_perror (err); - pi->next = class->ports; - pi->prevp = &class->ports; - if (class->ports) - class->ports->prevp = &pi->next; - class->ports = pi; - bucket->count++; - class->count++; - mutex_unlock (&_ports_lock); - - mach_port_move_member (mach_task_self (), port, bucket->portset); - - if (stat.mps_srights) - { - err = mach_port_request_notification (mach_task_self (), port, - MACH_NOTIFY_NO_SENDERS, - stat.mps_mscount, - port, MACH_MSG_TYPE_MAKE_SEND_ONCE, - &foo); - assert_perror (err); - if (foo != MACH_PORT_NULL) - mach_port_deallocate (mach_task_self (), foo); - } - - return pi; + void *result; + if (ports_import_port (class, bucket, port, size, &result)) + result = 0; + return result; } -- cgit v1.2.3