diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2019-11-10 23:31:46 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2019-11-10 23:36:36 +0000 |
commit | 53f5ddbeeb59d8f551bfe0f3039434483ace1ff4 (patch) | |
tree | ffda093d58231ac281d613dfd27ce7f5dd3bd911 | |
parent | 479b6312fb2dc46cd5a096f7ea747a575401f11d (diff) | |
download | hurd-53f5ddbeeb59d8f551bfe0f3039434483ace1ff4.tar.gz hurd-53f5ddbeeb59d8f551bfe0f3039434483ace1ff4.tar.bz2 hurd-53f5ddbeeb59d8f551bfe0f3039434483ace1ff4.zip |
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.c | 1 | ||||
-rw-r--r-- | libfshelp/fshelp.h | 15 | ||||
-rw-r--r-- | libnetfs/release-peropen.c | 1 |
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); |