d1681e
From 9b001e38b21d433580d55e68225f2cd5af058dbf Mon Sep 17 00:00:00 2001
d1681e
From: Gaurav Yadav <gyadav@redhat.com>
d1681e
Date: Thu, 1 Mar 2018 14:44:34 +0530
d1681e
Subject: [PATCH 204/212] glusterd : memory leak in mgmt_v3 lock functionality
d1681e
d1681e
In order to take care of stale lock issue, a timer was intrduced
d1681e
in mgmt_v3 lock. This timer is not freeing the memory due to
d1681e
which this leak got introduced
d1681e
d1681e
With this fix now memory cleanup in locking is handled properly
d1681e
d1681e
>upstream patch: https://review.gluster.org/#/c/19651/
d1681e
>                https://review.gluster.org/#/c/19723/
d1681e
d1681e
>Change-Id: I2e1ce3ebba3520f7660321f3d97554080e4e22f4
d1681e
>BUG: 1550339
d1681e
>Signed-off-by: Gaurav Yadav <gyadav@redhat.com>
d1681e
d1681e
Change-Id: I2e1ce3ebba3520f7660321f3d97554080e4e22f4
d1681e
BUG: 1529451
d1681e
Signed-off-by: Gaurav Yadav <gyadav@redhat.com>
d1681e
Reviewed-on: https://code.engineering.redhat.com/gerrit/134218
d1681e
Tested-by: RHGS Build Bot <nigelb@redhat.com>
d1681e
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
d1681e
---
d1681e
 xlators/mgmt/glusterd/src/glusterd-locks.c | 8 +++++++-
d1681e
 1 file changed, 7 insertions(+), 1 deletion(-)
d1681e
d1681e
diff --git a/xlators/mgmt/glusterd/src/glusterd-locks.c b/xlators/mgmt/glusterd/src/glusterd-locks.c
d1681e
index bd73b37..a19d688 100644
d1681e
--- a/xlators/mgmt/glusterd/src/glusterd-locks.c
d1681e
+++ b/xlators/mgmt/glusterd/src/glusterd-locks.c
d1681e
@@ -719,6 +719,7 @@ gd_mgmt_v3_unlock_timer_cbk (void *data)
d1681e
         int32_t                         ret                 = -1;
d1681e
         glusterfs_ctx_t                *mgmt_lock_timer_ctx = NULL;
d1681e
         xlator_t                       *mgmt_lock_timer_xl  = NULL;
d1681e
+        gf_timer_t                     *timer               = NULL;
d1681e
 
d1681e
         this = THIS;
d1681e
         GF_VALIDATE_OR_GOTO ("glusterd", this, out);
d1681e
@@ -766,9 +767,10 @@ out:
d1681e
                 GF_VALIDATE_OR_GOTO (this->name, mgmt_lock_timer_ctx,
d1681e
                                      ret_function);
d1681e
 
d1681e
+                timer = mgmt_lock_timer->timer;
d1681e
+                GF_FREE (timer->data);
d1681e
                 gf_timer_call_cancel (mgmt_lock_timer_ctx,
d1681e
                                       mgmt_lock_timer->timer);
d1681e
-                GF_FREE(key);
d1681e
                 dict_del (conf->mgmt_v3_lock_timer, bt_key);
d1681e
                 mgmt_lock_timer->timer = NULL;
d1681e
         }
d1681e
@@ -791,6 +793,7 @@ glusterd_mgmt_v3_unlock (const char *name, uuid_t uuid, char *type)
d1681e
         xlator_t                        *this               = NULL;
d1681e
         glusterfs_ctx_t                *mgmt_lock_timer_ctx = NULL;
d1681e
         xlator_t                       *mgmt_lock_timer_xl  = NULL;
d1681e
+        gf_timer_t                     *timer               = NULL;
d1681e
 
d1681e
         this = THIS;
d1681e
         GF_ASSERT (this);
d1681e
@@ -893,6 +896,9 @@ glusterd_mgmt_v3_unlock (const char *name, uuid_t uuid, char *type)
d1681e
                 mgmt_lock_timer_ctx = mgmt_lock_timer_xl->ctx;
d1681e
                 GF_VALIDATE_OR_GOTO (this->name, mgmt_lock_timer_ctx, out);
d1681e
                 ret = 0;
d1681e
+
d1681e
+                timer = mgmt_lock_timer->timer;
d1681e
+                GF_FREE (timer->data);
d1681e
                 gf_timer_call_cancel (mgmt_lock_timer_ctx,
d1681e
                                       mgmt_lock_timer->timer);
d1681e
                 dict_del (priv->mgmt_v3_lock_timer, key_dup);
d1681e
-- 
d1681e
1.8.3.1
d1681e