diff options
| -rw-r--r-- | libglusterfs/src/dict.c | 49 | ||||
| -rw-r--r-- | libglusterfs/src/dict.h | 3 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpc-transport.c | 8 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 119 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handshake.c | 4 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 13 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-pmap.c | 8 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 6 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 3 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd3_1-mops.c | 10 | 
10 files changed, 189 insertions, 34 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 7a47a57b893..b1c1a5d9495 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -140,8 +140,12 @@ data_destroy (data_t *data)  		LOCK_DESTROY (&data->lock);  		if (!data->is_static) { -			if (data->data) -				GF_FREE (data->data); +			if (data->data) { +                                if (data->is_stdalloc) +                                        free (data->data); +				else +                                        GF_FREE (data->data); +                        }  			if (data->vec)  				GF_FREE (data->vec);  		} @@ -413,6 +417,8 @@ dict_destroy (dict_t *this)  	if (this->extra_free)  		GF_FREE (this->extra_free); +        if (this->extra_stdfree) +                free (this->extra_stdfree);  	if (!this->is_static)  		GF_FREE (this); @@ -1032,6 +1038,24 @@ data_from_dynstr (char *value)  }  data_t * +data_from_dynmstr (char *value) +{ +	if (!value) { +		gf_log ("dict", GF_LOG_CRITICAL, +			"@value=%p", value); +		return NULL; +	} + +	data_t *data = get_new_data (); + +	data->len = strlen (value) + 1; +	data->data = value; +        data->is_stdalloc = 1; + +	return data; +} + +data_t *  data_from_dynptr (void *value, int32_t len)  {  	data_t *data = get_new_data (); @@ -2041,6 +2065,27 @@ err:  	return ret;  } +/* +        for malloced strings we should do a free instead of GF_FREE +*/ +int +dict_set_dynmstr (dict_t *this, char *key, char *str) +{ +	data_t * data = NULL; +	int      ret  = 0; + +	data = data_from_dynmstr (str); +	if (!data) { +		ret = -EINVAL; +		goto err; +	} + +	ret = dict_set (this, key, data); + +err: +	return ret; +} +  int  dict_get_bin (dict_t *this, char *key, void **bin) diff --git a/libglusterfs/src/dict.h b/libglusterfs/src/dict.h index 508b139a288..41b6b6780cf 100644 --- a/libglusterfs/src/dict.h +++ b/libglusterfs/src/dict.h @@ -38,6 +38,7 @@ typedef struct _data_pair data_pair_t;  struct _data {    unsigned char is_static:1;    unsigned char is_const:1; +  unsigned char is_stdalloc:1;    int32_t len;    struct iovec *vec;    char *data; @@ -61,6 +62,7 @@ struct _dict {    data_pair_t **members;    data_pair_t *members_list;    char *extra_free; +  char *extra_stdfree;    gf_lock_t lock;  }; @@ -179,6 +181,7 @@ GF_MUST_CHECK int dict_set_bin (dict_t *this, char *key, void *ptr, size_t size)  GF_MUST_CHECK int dict_set_static_bin (dict_t *this, char *key, void *ptr, size_t size);  GF_MUST_CHECK int dict_set_str (dict_t *this, char *key, char *str); +GF_MUST_CHECK int dict_set_dynmstr (dict_t *this, char *key, char *str);  GF_MUST_CHECK int dict_set_dynstr (dict_t *this, char *key, char *str);  GF_MUST_CHECK int dict_get_str (dict_t *this, char *key, char **str); diff --git a/rpc/rpc-lib/src/rpc-transport.c b/rpc/rpc-lib/src/rpc-transport.c index 184d614a466..7acf04d027c 100644 --- a/rpc/rpc-lib/src/rpc-transport.c +++ b/rpc/rpc-lib/src/rpc-transport.c @@ -902,6 +902,10 @@ rpc_transport_load (glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)  		goto fail;  	} +        if (name) { +                GF_FREE (name); +        } +  	trans->ops = dlsym (handle, "tops");  	if (trans->ops == NULL) {  		gf_log ("rpc-transport", GF_LOG_ERROR, @@ -970,10 +974,6 @@ fail:                  GF_FREE (trans);          } -        if (name) { -                GF_FREE (name); -        } -          if (vol_opt) {                  GF_FREE (vol_opt);          } diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index f1a9ef5ef5c..c87ba07aa95 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -459,6 +459,8 @@ glusterd_handle_stage_op (rpcsvc_request_t *req)          ret = glusterd_op_sm_inject_event (GD_OP_EVENT_STAGE_OP, ctx);  out: +        if (stage_req.buf.buf_val) +                free (stage_req.buf.buf_val);//malloced by xdr          return ret;  } @@ -506,6 +508,8 @@ glusterd_handle_commit_op (rpcsvc_request_t *req)          ret = glusterd_op_sm_inject_event (GD_OP_EVENT_COMMIT_OP, ctx);  out: +        if (commit_req.buf.buf_val) +                free (commit_req.buf.buf_val);//malloced by xdr          return ret;  } @@ -551,6 +555,8 @@ glusterd_handle_cli_probe (rpcsvc_request_t *req)          gf_cmd_log ("peer probe","on host %s:%d %s",cli_req.hostname, cli_req.port,                      (ret) ? "FAILED" : "SUCCESS");  out: +        if (cli_req.hostname) +                free (cli_req.hostname);//its malloced by xdr          return ret;  } @@ -576,6 +582,8 @@ glusterd_handle_cli_deprobe (rpcsvc_request_t *req)          gf_cmd_log ("peer deprobe", "on host %s:%d %s", cli_req.hostname,                      cli_req.port, (ret) ? "FAILED" : "SUCCESS");  out: +        if (cli_req.hostname) +                free (cli_req.hostname);//malloced by xdr          return ret;  } @@ -608,6 +616,8 @@ glusterd_handle_cli_list_friends (rpcsvc_request_t *req)                                  "failed to "                                  "unserialize req-buffer to dictionary");                          goto out; +                } else { +                        dict->extra_stdfree = cli_req.dict.dict_val;                  }          } @@ -988,7 +998,8 @@ out:          ret = glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                       gf_xdr_serialize_cli_defrag_vol_rsp); - +        if (cli_req.volname) +                free (cli_req.volname);//malloced by xdr          return ret;  } @@ -1021,6 +1032,8 @@ glusterd_handle_cli_get_volume (rpcsvc_request_t *req)                                  "failed to "                                  "unserialize req-buffer to dictionary");                          goto out; +                } else { +                        dict->extra_stdfree = cli_req.dict.dict_val;                  }          } @@ -1087,6 +1100,8 @@ glusterd_handle_create_volume (rpcsvc_request_t *req)                                  "failed to "                                  "unserialize req-buffer to dictionary");                          goto out; +                } else { +                        dict->extra_stdfree = cli_req.bricks.bricks_val;                  }          } @@ -1198,6 +1213,8 @@ brick_validation:                      ((ret || err_ret) != 0) ? "FAILED": "SUCCESS");  out: +        if ((err_ret || ret) && dict) +                dict_unref (dict);          if (err_ret) {                  rsp.op_ret = -1;                  rsp.op_errno = 0; @@ -1216,6 +1233,8 @@ out:                  GF_FREE(free_ptr);          if (brickinfo)                  glusterd_brickinfo_delete (brickinfo); +        if (cli_req.volname) +                free (cli_req.volname); // its a malloced by xdr          return ret;  } @@ -1224,7 +1243,6 @@ glusterd_handle_cli_start_volume (rpcsvc_request_t *req)  {          int32_t                         ret = -1;          gf1_cli_start_vol_req           cli_req = {0,}; -        //dict_t                          *dict = NULL;          int32_t                         flags = 0;          GF_ASSERT (req); @@ -1244,7 +1262,8 @@ glusterd_handle_cli_start_volume (rpcsvc_request_t *req)                      ((ret == 0) ? "SUCCESS": "FAILED"));  out: - +        if (cli_req.volname) +                free (cli_req.volname); //its malloced by xdr          return ret;  } @@ -1272,6 +1291,8 @@ glusterd_handle_cli_stop_volume (rpcsvc_request_t *req)                      ((ret)?"FAILED":"SUCCESS"));  out: +        if (cli_req.volname) +                free (cli_req.volname); //its malloced by xdr          return ret;  } @@ -1300,6 +1321,8 @@ glusterd_handle_cli_delete_volume (rpcsvc_request_t *req)                     ((ret) ? "FAILED" : "SUCCESS"));  out: +        if (cli_req.volname) +                free (cli_req.volname); //its malloced by xdr          return ret;  } @@ -1327,6 +1350,7 @@ glusterd_handle_add_brick (rpcsvc_request_t *req)          glusterd_volinfo_t              *tmpvolinfo = NULL;          glusterd_conf_t                 *priv = NULL;          xlator_t                        *this = NULL; +        char                            *free_ptr = NULL;          this = THIS;          priv = this->private; @@ -1357,6 +1381,8 @@ glusterd_handle_add_brick (rpcsvc_request_t *req)                                  "failed to "                                  "unserialize req-buffer to dictionary");                          goto out; +                } else { +                        dict->extra_stdfree = cli_req.bricks.bricks_val;                  }          } @@ -1416,10 +1442,17 @@ brick_val:          if (bricks)                  brick_list = gf_strdup (bricks); +        if (!brick_list) { +                gf_log ("", GF_LOG_ERROR, "Out of memory"); +                ret = -1; +                goto out; +        } else { +                free_ptr = brick_list; +        }          gf_cmd_log ("Volume add-brick", "volname: %s type %s count:%d bricks:%s"                      ,volname, ((volinfo->type == 0)? "DEFAULT" : ((volinfo->type -                    == 1)? "STRIPE": "REPLICATE")), brick_count, brick_list);  +                    == 1)? "STRIPE": "REPLICATE")), brick_count, brick_list);          while ( i < brick_count) {                  i++; @@ -1438,7 +1471,7 @@ brick_val:                          snprintf(err_str, 1048, "Host %s not a friend",                                   brickinfo->hostname);                          gf_log ("glusterd", GF_LOG_ERROR, "%s", err_str); -                        err_ret = 1;  +                        err_ret = 1;                          goto out;                  }                  if ((!peerinfo->connected) && @@ -1475,6 +1508,8 @@ brick_validation:                     ((ret || err_ret) != 0)? "FAILED" : "SUCCESS");  out: +        if ((err_ret || ret) && dict) +                dict_unref (dict);          if (err_ret) {                  rsp.op_ret = -1;                  rsp.op_errno = 0; @@ -1491,6 +1526,10 @@ out:          }          if (brickinfo)                  glusterd_brickinfo_delete (brickinfo); +        if (free_ptr) +                GF_FREE (free_ptr); +        if (cli_req.volname) +                free (cli_req.volname); //its malloced by xdr          return ret;  } @@ -1529,6 +1568,8 @@ glusterd_handle_replace_brick (rpcsvc_request_t *req)                                  "failed to "                                  "unserialize req-buffer to dictionary");                          goto out; +                } else { +                        dict->extra_stdfree = cli_req.bricks.bricks_val;                  }          } @@ -1584,6 +1625,10 @@ glusterd_handle_replace_brick (rpcsvc_request_t *req)                     (ret) ? "FAILED" : "SUCCESS");  out: +        if (ret && dict) +                dict_unref (dict); +        if (cli_req.volname) +                free (cli_req.volname);//malloced by xdr          return ret;  } @@ -1633,6 +1678,8 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)                                  "failed to "                                  "unserialize req-buffer to dictionary");                          goto out; +                } else { +                        dict->extra_stdfree = cli_req.bricks.bricks_val;                  }          } @@ -1653,7 +1700,7 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)          ret = glusterd_volinfo_find (cli_req.volname, &volinfo);          if (ret) { -                 snprintf (err_str, 2048, "volname %s not found",  +                 snprintf (err_str, 2048, "volname %s not found",                            cli_req.volname);                   gf_log ("", GF_LOG_ERROR, "%s", err_str);                   err_ret = 1; @@ -1670,7 +1717,7 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)                          err_ret = 1;                          ret = -1;                          goto out; -                }  +                }          } @@ -1694,10 +1741,10 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)                  gf_log ("", GF_LOG_DEBUG, "Remove brick count %d brick: %s",                          i, brick); -                ret = glusterd_brickinfo_get(brick, volinfo, &brickinfo);  +                ret = glusterd_brickinfo_get(brick, volinfo, &brickinfo);                  if (ret) {                          snprintf(err_str, 2048," Incorrect brick %s for volname" -                                " %s", brick, cli_req.volname);  +                                " %s", brick, cli_req.volname);                          gf_log ("", GF_LOG_ERROR, "%s", err_str);                          err_ret = 1;                          goto out; @@ -1732,16 +1779,16 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)                                                           " for replica");                                                  gf_log ("",GF_LOG_ERROR,                                                          "%s", err_str); -                                                err_ret = 1;          +                                                err_ret = 1;                                                  goto out;                                          }                                  }                                  break; -                        }  +                        }                          pos++;                  }          } -        gf_cmd_log ("Volume remove-brick","volname: %s count:%d bricks:%s",  +        gf_cmd_log ("Volume remove-brick","volname: %s count:%d bricks:%s",                      cli_req.volname, count, brick_list);          ret = glusterd_remove_brick (req, dict); @@ -1750,6 +1797,8 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)                      (ret) ? "FAILED" : "SUCCESS");  out: +        if ((ret || err_ret) && dict) +                dict_unref (dict);          if (err_ret) {                  rsp.op_ret = -1;                  rsp.op_errno = 0; @@ -1763,12 +1812,14 @@ out:                                 "opinfo failed");                  ret = 0; //sent error to cli, prevent second reply -                 +          }          if (brick_list)                  GF_FREE (brick_list);          if (err_str)                  GF_FREE (err_str); +        if (cli_req.volname) +                free (cli_req.volname); //its malloced by xdr          return ret;  } @@ -1794,19 +1845,21 @@ glusterd_handle_log_filename (rpcsvc_request_t *req)          if (!dict)                  goto out; -        ret = dict_set_str (dict, "volname", cli_req.volname); +        ret = dict_set_dynmstr (dict, "volname", cli_req.volname);          if (ret)                  goto out; -        ret = dict_set_str (dict, "brick", cli_req.brick); +        ret = dict_set_dynmstr (dict, "brick", cli_req.brick);          if (ret)                  goto out; -        ret = dict_set_str (dict, "path", cli_req.path); +        ret = dict_set_dynmstr (dict, "path", cli_req.path);          if (ret)                  goto out;          ret = glusterd_log_filename (req, dict);  out: +        if (ret && dict) +                dict_unref (dict);          return ret;  } @@ -1866,6 +1919,10 @@ out:          ret = glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                       gf_xdr_serialize_cli_log_locate_rsp); +        if (cli_req.brick) +                free (cli_req.brick); //its malloced by xdr +        if (cli_req.volname) +                free (cli_req.volname); //its malloced by xdr          return ret;  } @@ -1891,11 +1948,11 @@ glusterd_handle_log_rotate (rpcsvc_request_t *req)          if (!dict)                  goto out; -        ret = dict_set_str (dict, "volname", cli_req.volname); +        ret = dict_set_dynmstr (dict, "volname", cli_req.volname);          if (ret)                  goto out; -        ret = dict_set_str (dict, "brick", cli_req.brick); +        ret = dict_set_dynmstr (dict, "brick", cli_req.brick);          if (ret)                  goto out; @@ -1906,6 +1963,8 @@ glusterd_handle_log_rotate (rpcsvc_request_t *req)          ret = glusterd_log_rotate (req, dict);  out: +        if (ret && dict) +                dict_unref (dict);          return ret;  } @@ -2135,12 +2194,18 @@ glusterd_handle_incoming_friend_req (rpcsvc_request_t *req)          if (ret)                  goto out; +        else +                dict->extra_stdfree = friend_req.vols.vols_val;          ret = glusterd_handle_friend_req (req, friend_req.uuid,                                            friend_req.hostname, friend_req.port,                                            dict);  out: +        if (ret && dict) +                dict_unref (dict); +        if (friend_req.hostname) +                free (friend_req.hostname);//malloced by xdr          return ret;  } @@ -2167,7 +2232,10 @@ glusterd_handle_incoming_unfriend_req (rpcsvc_request_t *req)                                              friend_req.hostname, friend_req.port);  out: - +        if (friend_req.hostname) +                free (friend_req.hostname);//malloced by xdr +        if (friend_req.vols.vols_val) +                free (friend_req.vols.vols_val);//malloced by xdr          return ret;  } @@ -2219,6 +2287,8 @@ glusterd_handle_friend_update (rpcsvc_request_t *req)                                  "failed to "                                  "unserialize req-buffer to dictionary");                          goto out; +                } else { +                        dict->extra_stdfree = friend_req.friends.friends_val;                  }          } @@ -2278,13 +2348,10 @@ glusterd_handle_probe_query (rpcsvc_request_t *req)          glusterd_conf_t     *conf = NULL;          gd1_mgmt_probe_req  probe_req = {{0},};          gd1_mgmt_probe_rsp  rsp = {{0},}; -        char                hostname[1024] = {0};          glusterd_peer_hostname_t        *name = NULL;          GF_ASSERT (req); -        probe_req.hostname = hostname; -          if (!gd_xdr_to_mgmt_probe_req (req->msg[0], &probe_req)) {                  //failed to decode msg;                  req->rpc_err = GARBAGE_ARGS; @@ -2319,6 +2386,8 @@ glusterd_handle_probe_query (rpcsvc_request_t *req)                  "Responded to %s, ret: %d", probe_req.hostname, ret);  out: +        if (probe_req.hostname) +                free (probe_req.hostname);//malloced by xdr          return ret;  } @@ -2378,7 +2447,7 @@ glusterd_friend_add (const char *hoststr, int port,                          goto out;                  } -                ret = dict_set_str (options, "remote-host", hostname); +                ret = dict_set_dynstr (options, "remote-host", hostname);                  if (ret)                          goto out; @@ -2767,7 +2836,7 @@ glusterd_stop_volume (rpcsvc_request_t *req, char *volname, int flags)          if (!dup_volname)                  goto out; -        ret = dict_set_str (ctx, "volname", dup_volname); +        ret = dict_set_dynstr (ctx, "volname", dup_volname);          if (ret)                  goto out; @@ -2784,6 +2853,8 @@ glusterd_stop_volume (rpcsvc_request_t *req, char *volname, int flags)          ret = glusterd_op_txn_begin ();  out: +        if (ret && ctx) +                dict_unref (ctx);          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c index 1ea1fcef02e..116ea61707c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handshake.c +++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c @@ -179,6 +179,10 @@ fail:          glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                 (gd_serialize_t)xdr_serialize_getspec_rsp); +        if (args.key) +                free (args.key);//malloced by xdr +        if (rsp.spec) +                free (rsp.spec);          return 0;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 8eb15cfd225..a844c343a3a 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -353,6 +353,7 @@ glusterd_op_stage_create_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)          gf_boolean_t                            exists = _gf_false;          char                                    *bricks = NULL;          char                                    *brick_list = NULL; +        char                                    *free_ptr = NULL;          glusterd_brickinfo_t                    *brick_info = NULL;          int32_t                                 brick_count = 0;          int32_t                                 i = 0; @@ -419,8 +420,16 @@ glusterd_op_stage_create_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)                  goto out;          } -        if (bricks) +        if (bricks) {                  brick_list = gf_strdup (bricks); +                if (!brick_list) { +                        ret = -1; +                        gf_log ("", GF_LOG_ERROR, "Out of memory"); +                        goto out; +                } else { +                        free_ptr = brick_list; +                } +        }          while ( i < brick_count) {                  i++; @@ -454,6 +463,8 @@ glusterd_op_stage_create_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)  out:          if (dict)                  dict_unref (dict); +        if (free_ptr) +                GF_FREE (free_ptr);          gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);          return ret; diff --git a/xlators/mgmt/glusterd/src/glusterd-pmap.c b/xlators/mgmt/glusterd/src/glusterd-pmap.c index b94d2c6cd93..a84d04fd130 100644 --- a/xlators/mgmt/glusterd/src/glusterd-pmap.c +++ b/xlators/mgmt/glusterd/src/glusterd-pmap.c @@ -314,6 +314,8 @@ gluster_pmap_portbybrick (rpcsvc_request_t *req)  fail:          glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                 (gd_serialize_t)xdr_from_pmap_port_by_brick_rsp); +        if (args.brick) +                free (args.brick);//malloced by xdr          return 0;  } @@ -362,6 +364,8 @@ gluster_pmap_signup (rpcsvc_request_t *req)  fail:          glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                 (gd_serialize_t)xdr_from_pmap_signup_rsp); +        if (args.brick) +                free (args.brick);//malloced by xdr          return 0;  } @@ -384,6 +388,8 @@ gluster_pmap_signin (rpcsvc_request_t *req)  fail:          glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                 (gd_serialize_t)xdr_from_pmap_signin_rsp); +        if (args.brick) +                free (args.brick);//malloced by xdr          return 0;  } @@ -409,6 +415,8 @@ gluster_pmap_signout (rpcsvc_request_t *req)  fail:          glusterd_submit_reply (req, &rsp, NULL, 0, NULL,                                 (gd_serialize_t)xdr_from_pmap_signout_rsp); +        if (args.brick) +                free (args.brick);//malloced by xdr          return 0;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 4e65a7f0f07..f85fe2babc6 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -183,8 +183,8 @@ glusterd_is_local_addr (char *hostname)  out: -        //if (result) -          //      freeaddrinfo (result); +        if (result) +                freeaddrinfo (result);          if (buf.ifc_req)                  GF_FREE (buf.ifc_req); @@ -520,6 +520,8 @@ glusterd_brickinfo_delete (glusterd_brickinfo_t *brickinfo)          list_del_init (&brickinfo->brick_list); +        if (brickinfo->logfile) +                GF_FREE (brickinfo->logfile);          GF_FREE (brickinfo);          ret = 0; diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index ce6547e6e9e..ec12e45427d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -328,6 +328,7 @@ glusterd_default_xlator_options (glusterd_volinfo_t *volinfo)          ret = set_default_options (volinfo->dict,                                     volinfo->volname);          if (ret) { +                dict_unref (volinfo->dict);                  goto out;          } @@ -1971,6 +1972,8 @@ out:                  GF_FREE (fuse_filepath);          if (nfs_filepath)                  GF_FREE (nfs_filepath); +        if (nfs_vol_id) +                GF_FREE (nfs_vol_id);          if (nfs_subvols)                  GF_FREE (nfs_subvols);          if (fuse_fd > 0) diff --git a/xlators/mgmt/glusterd/src/glusterd3_1-mops.c b/xlators/mgmt/glusterd/src/glusterd3_1-mops.c index eb752a665fd..f9083852e1a 100644 --- a/xlators/mgmt/glusterd/src/glusterd3_1-mops.c +++ b/xlators/mgmt/glusterd/src/glusterd3_1-mops.c @@ -121,9 +121,13 @@ glusterd3_1_probe_cbk (struct rpc_req *req, struct iovec *iov,          gf_log ("glusterd", GF_LOG_NORMAL, "Received resp to probe req"); +        if (rsp.hostname) +                free (rsp.hostname);//malloced by xdr          return ret;  out: +        if (rsp.hostname) +                free (rsp.hostname);//malloced by xdr          return ret;  } @@ -216,6 +220,8 @@ glusterd3_1_friend_add_cbk (struct rpc_req * req, struct iovec *iov,          if (ctx)                  glusterd_destroy_probe_ctx (ctx);  out: +        if (rsp.hostname) +                free (rsp.hostname);//malloced by xdr          return ret;  } @@ -308,6 +314,8 @@ respond:          if (ctx)                  glusterd_destroy_probe_ctx (ctx); +        if (rsp.hostname) +                free (rsp.hostname);//malloced by xdr          return ret;  } @@ -850,7 +858,7 @@ glusterd3_1_friend_update (call_frame_t *frame, xlator_t *this,                  uuid_unparse (peerinfo->uuid, uuid_buf);                  snprintf (key, sizeof (key), "friend%d.uuid", count);                  dup_buf = gf_strdup (uuid_buf); -                ret = dict_set_str (friends, key, dup_buf); +                ret = dict_set_dynstr (friends, key, dup_buf);                  if (ret)                          goto out;                  snprintf (key, sizeof (key), "friend%d.hostname", count);  | 
