summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2019-11-10 23:31:46 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-11-10 23:36:36 +0000
commit53f5ddbeeb59d8f551bfe0f3039434483ace1ff4 (patch)
treeffda093d58231ac281d613dfd27ce7f5dd3bd911
parent479b6312fb2dc46cd5a096f7ea747a575401f11d (diff)
libfshelp: Fix memleak
* libfshelp/fshelp.h (fshelp_rlock_po_fini): New inline function. * libdiskfs/peropen-rele.c (diskfs_release_peropen): Call fshelp_rlock_po_fini. * libnetfs/release-peropen.c (netfs_release_peropen): Likewise.
-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 e8d83b556..ee4476778 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 4f0c693ed..91bbfe50e 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 2ef831837..43f4cba75 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);