From 683ce1bca3b6c541e565eec014fa7cc3308957d8 Mon Sep 17 00:00:00 2001 From: Raghavendra Bhat Date: Wed, 22 Feb 2012 18:27:15 +0530 Subject: glusterfsd: unref the dict and use dict_set_dynstr to avoid memleak Unref the new dict and use proper dict api (dict_set_dynstr) to save data for displaying volume status information, which otherwise leads to memory leak in the process. Change-Id: Icb9ceb1a867c5b9759211a67027d983ab9b7e1c2 BUG: 796186 Signed-off-by: Raghavendra Bhat Reviewed-on: http://review.gluster.com/2799 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- glusterfsd/src/glusterfsd-mgmt.c | 2 ++ libglusterfs/src/inode.c | 2 +- libglusterfs/src/stack.c | 16 ++++++++++------ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 4220baf98..5afa558dd 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -932,6 +932,8 @@ glusterfs_handle_brick_status (rpcsvc_request_t *req) out: if (dict) dict_unref (dict); + if (output) + dict_unref (output); if (brick_req.input.input_val) free (brick_req.input.input_val); if (xname) diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index 67752da71..3fad499eb 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -1652,7 +1652,7 @@ inode_dump_to_dict (inode_t *inode, char *prefix, dict_t *dict) memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "%s.gfid", prefix); - ret = dict_set_str (dict, key, gf_strdup (uuid_utoa (inode->gfid))); + ret = dict_set_dynstr (dict, key, gf_strdup (uuid_utoa (inode->gfid))); if (ret) goto out; diff --git a/libglusterfs/src/stack.c b/libglusterfs/src/stack.c index 29b44aedf..787f9a318 100644 --- a/libglusterfs/src/stack.c +++ b/libglusterfs/src/stack.c @@ -186,7 +186,7 @@ gf_proc_dump_call_frame_to_dict (call_frame_t *call_frame, memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "%s.translator", prefix); - ret = dict_set_str (dict, key, gf_strdup (tmp_frame.this->name)); + ret = dict_set_dynstr (dict, key, gf_strdup (tmp_frame.this->name)); if (ret) return; @@ -199,7 +199,7 @@ gf_proc_dump_call_frame_to_dict (call_frame_t *call_frame, if (tmp_frame.parent) { memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "%s.parent", prefix); - ret = dict_set_str (dict, key, + ret = dict_set_dynstr (dict, key, gf_strdup (tmp_frame.parent->this->name)); if (ret) return; @@ -208,7 +208,8 @@ gf_proc_dump_call_frame_to_dict (call_frame_t *call_frame, if (tmp_frame.wind_from) { memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "%s.windfrom", prefix); - ret = dict_set_str (dict, key, gf_strdup (tmp_frame.wind_from)); + ret = dict_set_dynstr (dict, key, + gf_strdup (tmp_frame.wind_from)); if (ret) return; } @@ -216,7 +217,8 @@ gf_proc_dump_call_frame_to_dict (call_frame_t *call_frame, if (tmp_frame.wind_to) { memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "%s.windto", prefix); - ret = dict_set_str (dict, key, gf_strdup (tmp_frame.wind_to)); + ret = dict_set_dynstr (dict, key, + gf_strdup (tmp_frame.wind_to)); if (ret) return; } @@ -224,7 +226,8 @@ gf_proc_dump_call_frame_to_dict (call_frame_t *call_frame, if (tmp_frame.unwind_from) { memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "%s.unwindfrom", prefix); - ret = dict_set_str (dict, key, gf_strdup (tmp_frame.unwind_from)); + ret = dict_set_dynstr (dict, key, + gf_strdup (tmp_frame.unwind_from)); if (ret) return; } @@ -232,7 +235,8 @@ gf_proc_dump_call_frame_to_dict (call_frame_t *call_frame, if (tmp_frame.unwind_to) { memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "%s.unwind_to", prefix); - ret = dict_set_str (dict, key, gf_strdup (tmp_frame.unwind_to)); + ret = dict_set_dynstr (dict, key, + gf_strdup (tmp_frame.unwind_to)); } return; -- cgit