summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPranith K <pranithk@gluster.com>2010-10-08 01:37:54 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-10-08 04:28:55 -0700
commitd4b0360c8c4c5dab692f827972ccea0e728af688 (patch)
tree6c5d32b86feba35d007f057fc43d885ff2cffdb3
parentce616c5fa08722044ee311f5f6c7c4e3ccb684c4 (diff)
mgmt/glusterd: memory leak fixes
Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1726 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1726
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handshake.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c18
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-sm.c23
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-sm.h2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c2
6 files changed, 25 insertions, 24 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index 57239c626..e22f0e403 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -321,7 +321,7 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,
ret = -1;
goto out;
}
-
+
pairs = dict->members_list;
if (!pairs) {
ret = -1;
diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c
index fbc25d1c6..213bcc6fb 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handshake.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c
@@ -164,7 +164,7 @@ server_getspec (rpcsvc_request_t *req)
}
if (file_len) {
- rsp.spec = CALLOC (file_len, sizeof (char));
+ rsp.spec = CALLOC (file_len+1, sizeof (char));
if (!rsp.spec) {
ret = -1;
op_errno = ENOMEM;
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
index 4ae7afcc3..d9d324b2e 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -440,12 +440,15 @@ glusterd_op_stage_create_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
brick_list = tmpptr;
}
glusterd_brickinfo_delete (brick_info);
+ brick_info = NULL;
}
out:
if (dict)
dict_unref (dict);
if (free_ptr)
GF_FREE (free_ptr);
+ if (brick_info)
+ glusterd_brickinfo_delete (brick_info);
gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);
return ret;
@@ -695,6 +698,7 @@ glusterd_op_stage_add_brick (gd1_mgmt_stage_op_req *req, char **op_errstr)
char cmd_str[1024];
glusterd_conf_t *priv = NULL;
char msg[2048] = {0,};
+ gf_boolean_t brick_alloc = _gf_false;
GF_ASSERT (req);
@@ -755,19 +759,21 @@ glusterd_op_stage_add_brick (gd1_mgmt_stage_op_req *req, char **op_errstr)
brick = strtok_r (brick_list+1, " \n", &saveptr);
while ( i < count) {
- ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo, &brickinfo);
+ ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo,
+ &brickinfo);
if (!ret) {
gf_log ("", GF_LOG_ERROR, "Adding duplicate brick: %s",
brick);
ret = -1;
goto out;
} else {
- ret = glusterd_brickinfo_from_brick(brick, &brickinfo);
+ ret = glusterd_brickinfo_from_brick (brick, &brickinfo);
if (ret) {
gf_log ("", GF_LOG_ERROR, "Add-brick: Unable"
" to get brickinfo");
goto out;
}
+ brick_alloc = _gf_true;
}
snprintf (cmd_str, 1024, "%s", brickinfo->path);
ret = glusterd_resolve_brick (brickinfo);
@@ -802,6 +808,8 @@ glusterd_op_stage_add_brick (gd1_mgmt_stage_op_req *req, char **op_errstr)
}
glusterd_brickinfo_delete (brickinfo);
+ brick_alloc = _gf_false;
+ brickinfo = NULL;
brick = strtok_r (NULL, " \n", &saveptr);
i++;
}
@@ -811,6 +819,9 @@ out:
dict_unref (dict);
if (free_ptr)
GF_FREE (free_ptr);
+ if (brick_alloc && brickinfo)
+ glusterd_brickinfo_delete (brickinfo);
+
gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);
return ret;
@@ -1436,7 +1447,8 @@ glusterd_op_perform_add_bricks (glusterd_volinfo_t *volinfo, int32_t count,
while (i <= count) {
- ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo, &brickinfo);
+ ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo,
+ &brickinfo);
if (ret)
goto out;
diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c
index 051bdee91..6061d0276 100644
--- a/xlators/mgmt/glusterd/src/glusterd-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-sm.c
@@ -129,10 +129,9 @@ glusterd_broadcast_friend_delete (char *hostname, uuid_t uuid)
{
int ret = 0;
rpc_clnt_procedure_t *proc = NULL;
- call_frame_t *frame = NULL;
glusterd_conf_t *conf = NULL;
xlator_t *this = NULL;
- glusterd_friend_update_ctx_t *ctx = NULL;
+ glusterd_friend_update_ctx_t ctx = {{0},};
this = THIS;
conf = this->private;
@@ -140,27 +139,13 @@ glusterd_broadcast_friend_delete (char *hostname, uuid_t uuid)
GF_ASSERT (conf);
GF_ASSERT (conf->mgmt);
- ctx = GF_CALLOC (1, sizeof (*ctx),
- gf_gld_mt_friend_update_ctx_t);
-
- if (!ctx) {
- ret = -1;
- goto out;
- }
-
- ctx->hostname = gf_strdup (hostname);
- ctx->op = GD_FRIEND_UPDATE_DEL;
+ ctx.hostname = hostname;
+ ctx.op = GD_FRIEND_UPDATE_DEL;
proc = &conf->mgmt->proctable[GD_MGMT_FRIEND_UPDATE];
if (proc->fn) {
- frame = create_frame (this, this->ctx->pool);
- if (!frame) {
- goto out;
- }
- frame->local = ctx;
- ret = proc->fn (frame, this, ctx);
+ ret = proc->fn (NULL, this, &ctx);
}
-out:
gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);
return ret;
diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.h b/xlators/mgmt/glusterd/src/glusterd-sm.h
index 5828f05e3..8e8c2ea7f 100644
--- a/xlators/mgmt/glusterd/src/glusterd-sm.h
+++ b/xlators/mgmt/glusterd/src/glusterd-sm.h
@@ -182,4 +182,6 @@ glusterd_friend_sm_state_name_get (glusterd_friend_sm_state_t state);
int
glusterd_broadcast_friend_delete (char *hostname, uuid_t uuid);
+void
+glusterd_destroy_friend_update_ctx (glusterd_friend_update_ctx_t *ctx);
#endif
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index c7018cde8..11a19d2a2 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -1575,6 +1575,8 @@ glusterd_import_friend_volume (dict_t *vols, int count)
list_for_each_entry_safe (brickinfo, tmp, &volinfo->bricks,
brick_list) {
+ glusterd_delete_volfile (volinfo, brickinfo);
+ glusterd_store_delete_brick (volinfo, brickinfo);
ret = glusterd_brickinfo_delete (brickinfo);
if (ret)
goto out;