diff options
Diffstat (limited to 'libports/import-port.c')
-rw-r--r-- | libports/import-port.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/libports/import-port.c b/libports/import-port.c index 226f47e3..26606720 100644 --- a/libports/import-port.c +++ b/libports/import-port.c @@ -75,15 +75,22 @@ ports_import_port (struct port_class *class, struct port_bucket *bucket, goto loop; } + pthread_rwlock_wrlock (&_ports_htable_lock); + err = hurd_ihash_add (&_ports_htable, port, pi); + if (err) + { + pthread_rwlock_unlock (&_ports_htable_lock); + goto lose; + } err = hurd_ihash_add (&bucket->htable, port, pi); if (err) - goto lose; + { + hurd_ihash_locp_remove (&_ports_htable, pi->ports_htable_entry); + pthread_rwlock_unlock (&_ports_htable_lock); + goto lose; + } + pthread_rwlock_unlock (&_ports_htable_lock); - pi->next = class->ports; - pi->prevp = &class->ports; - if (class->ports) - class->ports->prevp = &pi->next; - class->ports = pi; bucket->count++; class->count++; pthread_mutex_unlock (&_ports_lock); |