diff options
Diffstat (limited to 'libports/lookup-port.c')
-rw-r--r-- | libports/lookup-port.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/libports/lookup-port.c b/libports/lookup-port.c index f79f6f0c..858ee112 100644 --- a/libports/lookup-port.c +++ b/libports/lookup-port.c @@ -26,27 +26,22 @@ ports_lookup_port (struct port_bucket *bucket, mach_port_t port, struct port_class *class) { - struct port_info *pi = 0; - + struct port_info *pi; + pthread_mutex_lock (&_ports_lock); + pthread_rwlock_rdlock (&_ports_htable_lock); - if (bucket) - pi = hurd_ihash_find (&bucket->htable, port); - else - for (bucket = _ports_all_buckets; bucket; bucket = bucket->next) - { - pi = hurd_ihash_find (&bucket->htable, port); - if (pi) - break; - } - - if (pi && class && pi->class != class) + pi = hurd_ihash_find (&_ports_htable, port); + if (pi + && ((class && pi->class != class) + || (bucket && pi->bucket != bucket))) pi = 0; if (pi) pi->refcnt++; + pthread_rwlock_unlock (&_ports_htable_lock); pthread_mutex_unlock (&_ports_lock); - + return pi; } |