From 2b963bc22533cacbfc833cf64dd9bfef138db5ee Mon Sep 17 00:00:00 2001 From: Susant Palai Date: Mon, 28 Sep 2015 02:22:07 -0400 Subject: dht/rebalance: fix mem-leak in migration code path Change-Id: I37faf983fc02996541f3d96a17cb2a2c2cdb6781 BUG: 1266877 Signed-off-by: Susant Palai Reviewed-on: http://review.gluster.org/12235 Reviewed-by: Raghavendra G Tested-by: Raghavendra G --- xlators/cluster/dht/src/dht-rebalance.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'xlators/cluster/dht/src/dht-rebalance.c') diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index ac73a090637..5b154f531b4 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -44,6 +44,22 @@ } \ } \ +void +gf_defrag_free_container (struct dht_container *container) +{ + if (container) { + gf_dirent_entry_free (container->df_entry); + + if (container->parent_loc) { + loc_wipe (container->parent_loc); + } + + GF_FREE (container->parent_loc); + + GF_FREE (container); + } +} + void dht_set_global_defrag_error (gf_defrag_info_t *defrag, int ret) { @@ -1929,8 +1945,8 @@ gf_defrag_task (void *opaque) goto out; } - gf_dirent_free (iterator->df_entry); - GF_FREE (iterator); + gf_defrag_free_container (iterator); + continue; } else { @@ -2212,13 +2228,13 @@ gf_defrag_get_entry (xlator_t *this, int i, struct dht_container **container, } out: + loc_wipe (&entry_loc); + if (ret == 0) { *container = tmp_container; } else { if (tmp_container) { - GF_FREE (tmp_container->df_entry); - GF_FREE (tmp_container->parent_loc); - GF_FREE (tmp_container); + gf_defrag_free_container (tmp_container); } } -- cgit