diff options
| author | Vijay Bellur <vbellur@redhat.com> | 2019-02-27 13:38:33 -0800 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2019-02-27 13:42:02 -0800 | 
| commit | 16b4936696c8b602243513fbde0b20a1e8417432 (patch) | |
| tree | e19648bff54699c647d6dd226b66e3fea74f0814 | |
| parent | 2e9d3ab12df363ac5cdcbef693a5802c0066d7b4 (diff) | |
mgmt/glusterd: Fix a memory leak when peer detach fails
Dictionary object is not being unref'd when an error happens
in __glusterd_handle_cli_deprobe(). This patch addresses that problem.
Change-Id: I11e1f92d06dc9edd1260845256f435ea31ef1a87
fixes: bz#1683816
Signed-off-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 81074f71909..c3830589ce7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -1337,6 +1337,7 @@ __glusterd_handle_cli_deprobe(rpcsvc_request_t *req)      glusterd_volinfo_t *tmp = NULL;      glusterd_snap_t *snapinfo = NULL;      glusterd_snap_t *tmpsnap = NULL; +    gf_boolean_t need_free = _gf_false;      this = THIS;      GF_ASSERT(this); @@ -1357,6 +1358,13 @@ __glusterd_handle_cli_deprobe(rpcsvc_request_t *req)      if (cli_req.dict.dict_len) {          dict = dict_new(); +        if (dict) { +            need_free = _gf_true; +        } else { +            ret = -1; +            goto out; +        } +          ret = dict_unserialize(cli_req.dict.dict_val, cli_req.dict.dict_len,                                 &dict);          if (ret < 0) { @@ -1452,12 +1460,17 @@ __glusterd_handle_cli_deprobe(rpcsvc_request_t *req)                                       &op_errno);      } +    need_free = _gf_false; +  out:      free(cli_req.dict.dict_val);      if (ret) {          ret = glusterd_xfer_cli_deprobe_resp(req, ret, op_errno, NULL, hostname,                                               dict); +        if (need_free) { +            dict_unref(dict); +        }      }      glusterd_friend_sm();  | 
