summaryrefslogtreecommitdiffstats
path: root/xlators/features
diff options
context:
space:
mode:
authorMohit Agrawal <moagrawa@redhat.com>2018-05-23 09:10:11 +0530
committerShyamsundar Ranganathan <srangana@redhat.com>2018-05-25 02:05:37 +0000
commitb679fd4b73d9ec039029088769722887b61d750a (patch)
tree1fba7b4d16dea3ffa8808475d5d5cb44a3256bd1 /xlators/features
parent7b95d5a4b3988757bf8c91f82dcaf86ed3da6875 (diff)
Revert "glusterfsd: Memleak in glusterfsd process while brick mux is on"
Updates: bz#1582286 This reverts commit 7c3cc485054e4ede1efb358552135b432fb7047a. Change-Id: I831d646112bcfa13d0c2153482ad00ff1b23aa6c Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
Diffstat (limited to 'xlators/features')
-rw-r--r--xlators/features/bit-rot/src/stub/bit-rot-stub.c22
-rw-r--r--xlators/features/changelog/src/changelog-ev-handle.c8
-rw-r--r--xlators/features/changelog/src/changelog-rpc-common.c4
-rw-r--r--xlators/features/changelog/src/changelog.c12
-rw-r--r--xlators/features/changetimerecorder/src/changetimerecorder.c15
-rw-r--r--xlators/features/index/src/index.c21
-rw-r--r--xlators/features/leases/src/leases.c15
-rw-r--r--xlators/features/marker/src/marker.c71
-rw-r--r--xlators/features/quota/src/quota.c23
-rw-r--r--xlators/features/shard/src/shard.c3
-rw-r--r--xlators/features/trash/src/trash.c15
-rw-r--r--xlators/features/upcall/src/upcall.c18
12 files changed, 83 insertions, 144 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c
index 830357070d6..76a4c3f6962 100644
--- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c
+++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c
@@ -229,6 +229,18 @@ notify (xlator_t *this, int event, void *data, ...)
if (!priv)
return 0;
+ switch (event) {
+ case GF_EVENT_CLEANUP:
+ if (priv->signth) {
+ (void) gf_thread_cleanup_xint (priv->signth);
+ priv->signth = 0;
+ }
+ if (priv->container.thread) {
+ (void) gf_thread_cleanup_xint (priv->container.thread);
+ priv->container.thread = 0;
+ }
+ break;
+ }
default_notify (this, event, data);
return 0;
}
@@ -251,7 +263,6 @@ fini (xlator_t *this)
"Could not cancel sign serializer thread");
goto out;
}
- priv->signth = 0;
while (!list_empty (&priv->squeue)) {
sigstub = list_first_entry (&priv->squeue,
@@ -273,19 +284,12 @@ fini (xlator_t *this)
goto out;
}
- priv->container.thread = 0;
-
while (!list_empty (&priv->container.bad_queue)) {
stub = list_first_entry (&priv->container.bad_queue, call_stub_t,
list);
list_del_init (&stub->list);
call_stub_destroy (stub);
- }
-
- if (priv->local_pool) {
- mem_pool_destroy (priv->local_pool);
- priv->local_pool = NULL;
- }
+ };
pthread_mutex_destroy (&priv->container.bad_lock);
pthread_cond_destroy (&priv->container.bad_cond);
diff --git a/xlators/features/changelog/src/changelog-ev-handle.c b/xlators/features/changelog/src/changelog-ev-handle.c
index b5681944567..a7f485b019f 100644
--- a/xlators/features/changelog/src/changelog-ev-handle.c
+++ b/xlators/features/changelog/src/changelog-ev-handle.c
@@ -163,14 +163,12 @@ changelog_rpc_notify (struct rpc_clnt *rpc,
*/
rpc_clnt_unref (crpc->rpc);
- if (priv)
- selection = &priv->ev_selection;
+ selection = &priv->ev_selection;
LOCK (&crpc->lock);
{
- if (selection)
- changelog_deselect_event (this, selection,
- crpc->filter);
+ changelog_deselect_event (this, selection,
+ crpc->filter);
changelog_set_disconnect_flag (crpc, _gf_true);
}
UNLOCK (&crpc->lock);
diff --git a/xlators/features/changelog/src/changelog-rpc-common.c b/xlators/features/changelog/src/changelog-rpc-common.c
index 1745f218b08..7bd5b688fa5 100644
--- a/xlators/features/changelog/src/changelog-rpc-common.c
+++ b/xlators/features/changelog/src/changelog-rpc-common.c
@@ -275,10 +275,6 @@ changelog_rpc_server_destroy (xlator_t *this, rpcsvc_t *rpc, char *sockfile,
(void) rpcsvc_unregister_notify (rpc, fn, this);
sys_unlink (sockfile);
- if (rpc->rxpool) {
- mem_pool_destroy (rpc->rxpool);
- rpc->rxpool = NULL;
- }
GF_FREE (rpc);
}
diff --git a/xlators/features/changelog/src/changelog.c b/xlators/features/changelog/src/changelog.c
index 19d66b605bb..464a28dde6e 100644
--- a/xlators/features/changelog/src/changelog.c
+++ b/xlators/features/changelog/src/changelog.c
@@ -2111,6 +2111,14 @@ notify (xlator_t *this, int event, void *data, ...)
if (!priv)
goto out;
+ if (event == GF_EVENT_CLEANUP) {
+ /* terminate helper threads */
+ changelog_cleanup_helper_threads (this, priv);
+
+ /* terminate RPC server/threads */
+ changelog_cleanup_rpc_threads (this, priv);
+ }
+
if (event == GF_EVENT_TRANSLATOR_OP) {
dict = data;
@@ -2904,9 +2912,6 @@ fini (xlator_t *this)
/* cleanup barrier related objects */
changelog_barrier_pthread_destroy (priv);
- /* cleanup helper threads */
- changelog_cleanup_helper_threads (this, priv);
-
/* cleanup allocated options */
changelog_freeup_options (this, priv);
@@ -2917,7 +2922,6 @@ fini (xlator_t *this)
}
this->private = NULL;
- this->local_pool = NULL;
return;
}
diff --git a/xlators/features/changetimerecorder/src/changetimerecorder.c b/xlators/features/changetimerecorder/src/changetimerecorder.c
index 40bfcf4a32a..e97e3ad6cfa 100644
--- a/xlators/features/changetimerecorder/src/changetimerecorder.c
+++ b/xlators/features/changetimerecorder/src/changetimerecorder.c
@@ -19,6 +19,7 @@
#include "tier-ctr-interface.h"
/*******************************inode forget***********************************/
+
int
ctr_forget (xlator_t *this, inode_t *inode)
{
@@ -2305,6 +2306,15 @@ notify (xlator_t *this, int event, void *data, ...)
if (!priv)
goto out;
+ if (event == GF_EVENT_CLEANUP) {
+ if (fini_db (priv->_db_conn)) {
+ gf_msg (this->name, GF_LOG_WARNING, 0,
+ CTR_MSG_CLOSE_DB_CONN_FAILED, "Failed closing "
+ "db connection");
+ }
+ if (priv->_db_conn)
+ priv->_db_conn = NULL;
+ }
ret = default_notify (this, event, data);
out:
@@ -2345,10 +2355,6 @@ fini (xlator_t *this)
CTR_MSG_CLOSE_DB_CONN_FAILED, "Failed closing "
"db connection");
}
-
- if (priv->_db_conn)
- priv->_db_conn = NULL;
-
GF_FREE (priv->ctr_db_path);
if (pthread_mutex_destroy (&priv->compact_lock)) {
gf_msg (this->name, GF_LOG_WARNING, 0,
@@ -2358,7 +2364,6 @@ fini (xlator_t *this)
}
GF_FREE (priv);
mem_pool_destroy (this->local_pool);
- this->local_pool = NULL;
return;
}
diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c
index f39d901d624..152b52dfc33 100644
--- a/xlators/features/index/src/index.c
+++ b/xlators/features/index/src/index.c
@@ -2451,13 +2451,6 @@ fini (xlator_t *this)
priv = this->private;
if (!priv)
goto out;
-
- priv->down = _gf_true;
- pthread_cond_broadcast (&priv->cond);
- if (priv->thread) {
- gf_thread_cleanup_xint (priv->thread);
- priv->thread = 0;
- }
this->private = NULL;
LOCK_DESTROY (&priv->lock);
pthread_cond_destroy (&priv->cond);
@@ -2469,11 +2462,8 @@ fini (xlator_t *this)
if (priv->complete_watchlist)
dict_unref (priv->complete_watchlist);
GF_FREE (priv);
-
- if (this->local_pool) {
- mem_pool_destroy (this->local_pool);
- this->local_pool = NULL;
- }
+ mem_pool_destroy (this->local_pool);
+ this->local_pool = NULL;
out:
return;
}
@@ -2543,6 +2533,13 @@ notify (xlator_t *this, int event, void *data, ...)
if (!priv)
return 0;
+ switch (event) {
+ case GF_EVENT_CLEANUP:
+ priv->down = _gf_true;
+ pthread_cond_broadcast (&priv->cond);
+ break;
+ }
+
ret = default_notify (this, event, data);
return ret;
}
diff --git a/xlators/features/leases/src/leases.c b/xlators/features/leases/src/leases.c
index 34143859c56..a0423491d9e 100644
--- a/xlators/features/leases/src/leases.c
+++ b/xlators/features/leases/src/leases.c
@@ -1063,17 +1063,14 @@ fini (xlator_t *this)
priv->fini = _gf_true;
pthread_cond_broadcast (&priv->cond);
- if (priv->recall_thr) {
- gf_thread_cleanup_xint (priv->recall_thr);
- priv->recall_thr = 0;
- priv->inited_recall_thr = _gf_false;
- }
+ pthread_join (priv->recall_thr, NULL);
+
+ priv->inited_recall_thr = _gf_false;
GF_FREE (priv);
- if (this->ctx->tw) {
- glusterfs_ctx_tw_put (this->ctx);
- this->ctx->tw = NULL;
- }
+
+ glusterfs_ctx_tw_put (this->ctx);
+
return 0;
}
diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c
index 659ca890066..95297922ec5 100644
--- a/xlators/features/marker/src/marker.c
+++ b/xlators/features/marker/src/marker.c
@@ -3193,21 +3193,39 @@ mem_acct_init (xlator_t *this)
int32_t
init_xtime_priv (xlator_t *this, dict_t *options)
{
+ data_t *data = NULL;
int32_t ret = -1;
marker_conf_t *priv = NULL;
- char *tmp_opt = NULL;
GF_VALIDATE_OR_GOTO ("marker", this, out);
GF_VALIDATE_OR_GOTO (this->name, options, out);
GF_VALIDATE_OR_GOTO (this->name, this->private, out);
priv = this->private;
+ data = dict_get (options, VOLUME_UUID);
+ if (data != NULL) {
+ priv->volume_uuid = data->data;
+
+ ret = gf_uuid_parse (priv->volume_uuid, priv->volume_uuid_bin);
+ if (ret == -1) {
+ gf_log (this->name, GF_LOG_ERROR,
+ "invalid volume uuid %s", priv->volume_uuid);
+ goto out;
+ }
- ret = dict_get_str (options, "volume-uuid", &tmp_opt);
+ ret = gf_asprintf (&(priv->marker_xattr), "%s.%s.%s",
+ MARKER_XATTR_PREFIX, priv->volume_uuid,
+ XTIME);
- if (ret) {
+ if (ret == -1) {
+ priv->marker_xattr = NULL;
+ goto out;
+ }
+
+ gf_log (this->name, GF_LOG_DEBUG,
+ "volume-uuid = %s", priv->volume_uuid);
+ } else {
priv->volume_uuid = NULL;
- tmp_opt = "";
gf_log (this->name, GF_LOG_ERROR,
"please specify the volume-uuid"
@@ -3215,32 +3233,16 @@ init_xtime_priv (xlator_t *this, dict_t *options)
return -1;
}
- gf_asprintf (&priv->volume_uuid, "%s", tmp_opt);
+ data = dict_get (options, TIMESTAMP_FILE);
+ if (data != NULL) {
+ priv->timestamp_file = data->data;
- ret = gf_uuid_parse (priv->volume_uuid, priv->volume_uuid_bin);
-
- if (ret == -1) {
- gf_log (this->name, GF_LOG_ERROR,
- "invalid volume uuid %s", priv->volume_uuid);
- goto out;
- }
-
- ret = gf_asprintf (&(priv->marker_xattr), "%s.%s.%s",
- MARKER_XATTR_PREFIX, priv->volume_uuid,
- XTIME);
-
- if (ret == -1) {
- priv->marker_xattr = NULL;
- goto out;
- }
-
- gf_log (this->name, GF_LOG_DEBUG,
- "volume-uuid = %s", priv->volume_uuid);
+ gf_log (this->name, GF_LOG_DEBUG,
+ "the timestamp-file is = %s",
+ priv->timestamp_file);
- ret = dict_get_str (options, "timestamp-file", &tmp_opt);
- if (ret) {
+ } else {
priv->timestamp_file = NULL;
- tmp_opt = "";
gf_log (this->name, GF_LOG_ERROR,
"please specify the timestamp-file"
@@ -3249,15 +3251,6 @@ init_xtime_priv (xlator_t *this, dict_t *options)
goto out;
}
- ret = gf_asprintf (&priv->timestamp_file, "%s", tmp_opt);
- if (ret == -1) {
- priv->timestamp_file = NULL;
- goto out;
- }
-
- gf_log (this->name, GF_LOG_DEBUG,
- "the timestamp-file is = %s", priv->timestamp_file);
-
ret = 0;
out:
return ret;
@@ -3299,12 +3292,6 @@ marker_priv_cleanup (xlator_t *this)
LOCK_DESTROY (&priv->lock);
GF_FREE (priv);
-
- if (this->local_pool) {
- mem_pool_destroy (this->local_pool);
- this->local_pool = NULL;
- }
-
out:
return;
}
diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c
index cd7f0147d75..2b440bb5827 100644
--- a/xlators/features/quota/src/quota.c
+++ b/xlators/features/quota/src/quota.c
@@ -5242,8 +5242,6 @@ quota_priv_dump (xlator_t *this)
GF_ASSERT (this);
priv = this->private;
- if (!priv)
- goto out;
gf_proc_dump_add_section ("xlators.features.quota.priv", this->name);
@@ -5269,27 +5267,6 @@ out:
void
fini (xlator_t *this)
{
- quota_priv_t *priv = NULL;
- rpc_clnt_t *rpc = NULL;
- int i = 0, cnt = 0;
-
- priv = this->private;
- if (!priv)
- return;
- rpc = priv->rpc_clnt;
- priv->rpc_clnt = NULL;
- this->private = NULL;
- if (rpc) {
- cnt = GF_ATOMIC_GET (rpc->refcount);
- for (i = 0; i < cnt; i++)
- rpc_clnt_unref (rpc);
- }
- LOCK_DESTROY (&priv->lock);
- GF_FREE (priv);
- if (this->local_pool) {
- mem_pool_destroy (this->local_pool);
- this->local_pool = NULL;
- }
return;
}
diff --git a/xlators/features/shard/src/shard.c b/xlators/features/shard/src/shard.c
index d27f5e51921..9578dabca44 100644
--- a/xlators/features/shard/src/shard.c
+++ b/xlators/features/shard/src/shard.c
@@ -5681,9 +5681,6 @@ shard_forget (xlator_t *this, inode_t *inode)
shard_priv_t *priv = NULL;
priv = this->private;
- if (!priv)
- return 0;
-
inode_ctx_del (inode, this, &ctx_uint);
if (!ctx_uint)
return 0;
diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c
index e8f8b7bf051..cfdcc6ff5fc 100644
--- a/xlators/features/trash/src/trash.c
+++ b/xlators/features/trash/src/trash.c
@@ -33,6 +33,7 @@ trash_unlink_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
struct iatt *preoldparent, struct iatt *postoldparent,
struct iatt *prenewparent, struct iatt *postnewparent,
dict_t *xdata);
+
/* Common routines used in this translator */
/**
@@ -2430,7 +2431,6 @@ notify (xlator_t *this, int event, void *data, ...)
ret = create_internalop_directory (this);
}
-
out:
ret = default_notify (this, event, data);
if (ret)
@@ -2612,11 +2612,10 @@ void
fini (xlator_t *this)
{
trash_private_t *priv = NULL;
- inode_table_t *inode_table = NULL;
GF_VALIDATE_OR_GOTO ("trash", this, out);
priv = this->private;
- inode_table = priv->trash_itable;
+
if (priv) {
if (priv->newtrash_dir)
GF_FREE (priv->newtrash_dir);
@@ -2626,17 +2625,9 @@ fini (xlator_t *this)
GF_FREE (priv->brick_path);
if (priv->eliminate)
wipe_eliminate_path (&priv->eliminate);
- if (inode_table) {
- inode_table_destroy (inode_table);
- priv->trash_itable = NULL;
- }
GF_FREE (priv);
}
-
- if (this->local_pool) {
- mem_pool_destroy (this->local_pool);
- this->local_pool = NULL;
- }
+ mem_pool_destroy (this->local_pool);
this->private = NULL;
out:
return;
diff --git a/xlators/features/upcall/src/upcall.c b/xlators/features/upcall/src/upcall.c
index dc09b2b3027..8ea5e3a4c6d 100644
--- a/xlators/features/upcall/src/upcall.c
+++ b/xlators/features/upcall/src/upcall.c
@@ -2446,11 +2446,8 @@ fini (xlator_t *this)
priv->fini = 1;
- if (priv->reaper_thr) {
- gf_thread_cleanup_xint (priv->reaper_thr);
- priv->reaper_thr = 0;
- priv->reaper_init_done = _gf_false;
- }
+ if (priv->reaper_init_done)
+ pthread_join (priv->reaper_thr, NULL);
dict_unref (priv->xattrs);
LOCK_DESTROY (&priv->inode_ctx_lk);
@@ -2460,24 +2457,13 @@ fini (xlator_t *this)
* before calling xlator_fini */
GF_FREE (priv);
- if (this->local_pool) {
- mem_pool_destroy (this->local_pool);
- this->local_pool = NULL;
- }
-
return 0;
}
int
upcall_forget (xlator_t *this, inode_t *inode)
{
- upcall_private_t *priv = this->private;
-
- if (!priv)
- goto out;
-
upcall_cleanup_inode_ctx (this, inode);
-out:
return 0;
}