summaryrefslogtreecommitdiff
path: root/libports/port-deref-weak.c
diff options
context:
space:
mode:
Diffstat (limited to 'libports/port-deref-weak.c')
-rw-r--r--libports/port-deref-weak.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/libports/port-deref-weak.c b/libports/port-deref-weak.c
index beb48423..8432660c 100644
--- a/libports/port-deref-weak.c
+++ b/libports/port-deref-weak.c
@@ -25,12 +25,8 @@ void
ports_port_deref_weak (void *portstruct)
{
struct port_info *pi = portstruct;
-
- pthread_mutex_lock (&_ports_lock);
- assert (pi->weakrefcnt);
- pi->weakrefcnt--;
- if (pi->refcnt == 0 && pi->weakrefcnt == 0)
+ struct references result;
+ refcounts_deref_weak (&pi->refcounts, &result);
+ if (result.hard == 0 && result.weak == 0)
_ports_complete_deallocate (pi);
- else
- pthread_mutex_unlock (&_ports_lock);
}