diff options
author | Amar Tumballi <amarts@redhat.com> | 2012-06-05 14:15:54 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-06-05 10:45:10 -0700 |
commit | 6eee473eba94697953e8b3e1b04fe5ef1de5f474 (patch) | |
tree | d435b4f4186690907c39a28257f3707ea86bbeb1 /xlators | |
parent | 04fd2972fe8a9b9568ac781ba7677f13fdce0f57 (diff) |
core: coverity fixes (mostly resource leak fixes)
currently working on obvious resource leak reports in coverity
Change-Id: I261f4c578987b16da399ab5a504ad0fda0b176b1
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 789278
Reviewed-on: http://review.gluster.com/3265
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/cluster/dht/src/dht-helper.c | 2 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht.c | 8 | ||||
-rw-r--r-- | xlators/cluster/dht/src/switch.c | 37 | ||||
-rw-r--r-- | xlators/cluster/stripe/src/stripe-helpers.c | 11 | ||||
-rw-r--r-- | xlators/features/index/src/index.c | 2 | ||||
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 2 | ||||
-rw-r--r-- | xlators/protocol/server/src/authenticate.c | 1 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-handshake.c | 5 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-helpers.c | 4 |
9 files changed, 52 insertions, 20 deletions
diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c index 920a7aabc50..611de19e48e 100644 --- a/xlators/cluster/dht/src/dht-helper.c +++ b/xlators/cluster/dht/src/dht-helper.c @@ -80,7 +80,7 @@ dht_filter_loc_subvol_key (xlator_t *this, loc_t *loc, loc_t *new_loc, int ret = 0; /* not found */ /* Why do other tasks if first required 'char' itself is not there */ - if (!loc->name || !strchr (loc->name, '@')) + if (!new_loc || !loc || !loc->name || !strchr (loc->name, '@')) goto out; trav = this->children; diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index c25cdb4fd80..c5128544279 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.c @@ -391,6 +391,8 @@ init (xlator_t *this) defrag->is_exiting = 0; + conf->defrag = defrag; + ret = dict_get_str (this->options, "node-uuid", &node_uuid); if (ret) { gf_log (this->name, GF_LOG_ERROR, "node-uuid not " @@ -407,9 +409,6 @@ init (xlator_t *this) defrag->cmd = cmd; defrag->stats = _gf_false; - - conf->defrag = defrag; - } conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_ON; @@ -493,6 +492,9 @@ err: if (conf->du_stats) GF_FREE (conf->du_stats); + if (conf->defrag) + GF_FREE (conf->defrag); + GF_FREE (conf); } diff --git a/xlators/cluster/dht/src/switch.c b/xlators/cluster/dht/src/switch.c index fe75914f247..ab261da870f 100644 --- a/xlators/cluster/dht/src/switch.c +++ b/xlators/cluster/dht/src/switch.c @@ -67,29 +67,38 @@ get_switch_matching_subvol (const char *path, dht_conf_t *conf, struct switch_struct *cond = NULL; struct switch_struct *trav = NULL; char *pathname = NULL; - int idx = 0; + int idx = 0; + xlator_t *subvol = NULL; cond = conf->private; + subvol = hashed_subvol; if (!cond) - return hashed_subvol; + goto out; - trav = cond; pathname = gf_strdup (path); + if (!pathname) + goto out; + + trav = cond; while (trav) { if (fnmatch (trav->path_pattern, pathname, FNM_NOESCAPE) == 0) { for (idx = 0; idx < trav->num_child; idx++) { if (trav->array[idx].xl == hashed_subvol) - return hashed_subvol; + goto out; } idx = trav->node_index++; trav->node_index %= trav->num_child; - return trav->array[idx].xl; + subvol = trav->array[idx].xl; + goto out; } trav = trav->next; } - GF_FREE (pathname); - return hashed_subvol; +out: + if (pathname) + GF_FREE (pathname); + + return subvol; } @@ -663,8 +672,10 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf, dup_str = gf_strdup (switch_str); switch_opt = GF_CALLOC (1, sizeof (struct switch_struct), gf_switch_mt_switch_struct); - if (!switch_opt) + if (!switch_opt) { + GF_FREE (dup_str); goto err; + } pattern = strtok_r (dup_str, ":", &tmp_str1); childs = strtok_r (NULL, ":", &tmp_str1); @@ -674,6 +685,7 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf, "for all the unconfigured child nodes," " hence neglecting current option"); switch_str = strtok_r (NULL, ";", &tmp_str); + GF_FREE (switch_opt); GF_FREE (dup_str); continue; } @@ -746,6 +758,7 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf, /* First entry */ switch_buf = switch_opt; } + switch_opt = NULL; switch_str = strtok_r (NULL, ";", &tmp_str); } @@ -802,15 +815,19 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf, /* First entry */ switch_buf = switch_opt; } + switch_opt = NULL; } /* */ conf->private = switch_buf; return 0; err: + if (switch_buf_array) + GF_FREE (switch_buf_array); + if (switch_opt) + GF_FREE (switch_opt); + if (switch_buf) { - if (switch_buf_array) - GF_FREE (switch_buf_array); trav = switch_buf; while (trav) { if (trav->array) diff --git a/xlators/cluster/stripe/src/stripe-helpers.c b/xlators/cluster/stripe/src/stripe-helpers.c index a2ebc1201f7..1821832c20e 100644 --- a/xlators/cluster/stripe/src/stripe-helpers.c +++ b/xlators/cluster/stripe/src/stripe-helpers.c @@ -471,12 +471,16 @@ set_stripe_block_size (xlator_t *this, stripe_private_t *priv, char *data) temp_stripeopt = NULL; else temp_stripeopt = priv->pattern; - priv->pattern = stripe_opt; + stripe_opt->next = temp_stripeopt; - stripe_str = strtok_r (NULL, ",", &tmp_str); + priv->pattern = stripe_opt; + stripe_opt = NULL; + GF_FREE (dup_str); dup_str = NULL; + + stripe_str = strtok_r (NULL, ",", &tmp_str); } ret = 0; @@ -485,6 +489,9 @@ out: if (dup_str) GF_FREE (dup_str); + if (stripe_opt) + GF_FREE (stripe_opt); + return ret; } diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c index 1025c3fc308..508eb91a373 100644 --- a/xlators/features/index/src/index.c +++ b/xlators/features/index/src/index.c @@ -1070,13 +1070,13 @@ init (xlator_t *this) uuid_generate (priv->xattrop_vgfid); INIT_LIST_HEAD (&priv->callstubs); - this->private = priv; ret = pthread_create (&thread, &priv->w_attr, index_worker, this); if (ret) { gf_log (this->name, GF_LOG_WARNING, "Failed to create " "worker thread, aborting"); goto out; } + this->private = priv; ret = 0; out: if (!this->private && priv) diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index be394773b66..6d39b1f5a86 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -106,7 +106,7 @@ send_fuse_iov (xlator_t *this, fuse_in_header_t *finh, struct iovec *iov_out, if (!this || !finh || !iov_out) { gf_log ("send_fuse_iov", GF_LOG_ERROR,"Invalid arguments"); - return -1; + return EINVAL; } priv = this->private; diff --git a/xlators/protocol/server/src/authenticate.c b/xlators/protocol/server/src/authenticate.c index ffadf2e4d67..d1cdebdee95 100644 --- a/xlators/protocol/server/src/authenticate.c +++ b/xlators/protocol/server/src/authenticate.c @@ -96,6 +96,7 @@ init (dict_t *this, char *key, data_t *value, void *data) if (!auth_handle->vol_opt) { dict_set (this, key, data_from_dynptr (NULL, 0)); *error = -1; + GF_FREE (auth_handle); dlclose (handle); return; } diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c index 7761f78c474..abccc389839 100644 --- a/xlators/protocol/server/src/server-handshake.c +++ b/xlators/protocol/server/src/server-handshake.c @@ -311,8 +311,6 @@ server_getspec (rpcsvc_request_t *req) goto fail; } ret = read (spec_fd, rsp.spec, file_len); - - close (spec_fd); } /* convert to XDR */ @@ -323,6 +321,9 @@ fail: rsp.op_errno = gf_errno_to_error (op_errno); rsp.op_ret = ret; + if (spec_fd != -1) + close (spec_fd); + server_submit_reply (NULL, req, &rsp, NULL, 0, NULL, (xdrproc_t)xdr_gf_getspec_rsp); diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c index 8827a48b041..284b44145ec 100644 --- a/xlators/protocol/server/src/server-helpers.c +++ b/xlators/protocol/server/src/server-helpers.c @@ -1289,10 +1289,14 @@ serialize_rsp_direntp (gf_dirent_t *entries, gfs3_readdirp_rsp *rsp) rsp->reply = trav; prev = trav; + trav = NULL; } ret = 0; out: + if (trav) + GF_FREE (trav); + return ret; } |