aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdiskfs/peropen-rele.c1
-rw-r--r--libfshelp/fshelp.h15
-rw-r--r--libnetfs/release-peropen.c1
3 files changed, 17 insertions, 0 deletions
diff --git a/libdiskfs/peropen-rele.c b/libdiskfs/peropen-rele.c
index e8d83b55..ee447677 100644
--- a/libdiskfs/peropen-rele.c
+++ b/libdiskfs/peropen-rele.c
@@ -37,6 +37,7 @@ diskfs_release_peropen (struct peropen *po)
diskfs_nput (po->np);
else
diskfs_nrele (po->np);
+ fshelp_rlock_po_fini (&po->lock_status);
free (po->path);
free (po);
diff --git a/libfshelp/fshelp.h b/libfshelp/fshelp.h
index 4f0c693e..91bbfe50 100644
--- a/libfshelp/fshelp.h
+++ b/libfshelp/fshelp.h
@@ -298,6 +298,21 @@ error_t fshelp_rlock_po_init (struct rlock_peropen *po)
/* Release all of the locks held by a given peropen. */
error_t fshelp_rlock_drop_peropen (struct rlock_peropen *po);
+/* Drop the peropen identifier */
+error_t fshelp_rlock_po_fini (struct rlock_peropen *po);
+
+#if defined(__USE_EXTERN_INLINES) || defined(DISKFS_DEFINE_EXTERN_INLINE)
+
+FSHELP_EXTERN_INLINE
+error_t fshelp_rlock_po_fini (struct rlock_peropen *po)
+{
+ free (po->locks);
+ po->locks = NULL;
+ return 0;
+}
+
+#endif /* Use extern inlines. */
+
/* Call when a user makes a request to tweak a lock as via fcntl. There
should be one rlock box per object. BOX is the rlock box associated
with the object. MUT is a mutex which should be held whenever this
diff --git a/libnetfs/release-peropen.c b/libnetfs/release-peropen.c
index 2ef83183..43f4cba7 100644
--- a/libnetfs/release-peropen.c
+++ b/libnetfs/release-peropen.c
@@ -39,6 +39,7 @@ netfs_release_peropen (struct peropen *po)
mach_port_deallocate (mach_task_self (), po->shadow_root_parent);
fshelp_rlock_drop_peropen (&po->lock_status);
+ fshelp_rlock_po_fini (&po->lock_status);
netfs_nput (po->np);