From 53f5ddbeeb59d8f551bfe0f3039434483ace1ff4 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 10 Nov 2019 23:31:46 +0000 Subject: 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. --- libdiskfs/peropen-rele.c | 1 + libfshelp/fshelp.h | 15 +++++++++++++++ libnetfs/release-peropen.c | 1 + 3 files changed, 17 insertions(+) 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); -- cgit v1.2.3