summaryrefslogtreecommitdiff
path: root/libports/create-internal.c
diff options
context:
space:
mode:
Diffstat (limited to 'libports/create-internal.c')
-rw-r--r--libports/create-internal.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/libports/create-internal.c b/libports/create-internal.c
index 85512970..8543986b 100644
--- a/libports/create-internal.c
+++ b/libports/create-internal.c
@@ -81,15 +81,22 @@ _ports_create_port_internal (struct port_class *class,
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);