summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libnetfs/release-peropen.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/libnetfs/release-peropen.c b/libnetfs/release-peropen.c
index 4fe479bf..c5565b23 100644
--- a/libnetfs/release-peropen.c
+++ b/libnetfs/release-peropen.c
@@ -23,7 +23,13 @@
void
netfs_release_peropen (struct peropen *po)
{
- mach_port_deallocate (mach_task_self (), dotdotport);
- netfs_nrele (po->np);
- free (po);
+ mutex_lock (&po->np->lock);
+ if (--po->refcnt)
+ mutex_unlock (&po->np->lock);
+ else
+ {
+ mach_port_deallocate (mach_task_self (), dotdotport);
+ netfs_nput (po->np);
+ free (po);
+ }
}