summaryrefslogtreecommitdiff
path: root/libports/import-port.c
diff options
context:
space:
mode:
Diffstat (limited to 'libports/import-port.c')
-rw-r--r--libports/import-port.c19
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);