diff options
author | Pranith Kumar K <pranithk@gluster.com> | 2011-12-15 16:51:02 +0530 |
---|---|---|
committer | Vijay Bellur <vijay@gluster.com> | 2011-12-28 22:47:36 -0800 |
commit | be003fbb3ac7a1f1021774ecb75a4929f1ba85d4 (patch) | |
tree | 099f4354f4d4fa140f607c374e295b6166db23ad /xlators/cluster/afr/src/pump.c | |
parent | c8c0942d1c890fd9b74c8e2fb3897bc96f9b9b82 (diff) |
cluster/afr: Handle fini for afr,pumpv3.3.0qa19
Change-Id: Idc0a05a8a25f278a7ab05e242263e0a5001bde18
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
BUG: 767862
Reviewed-on: http://review.gluster.com/800
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'xlators/cluster/afr/src/pump.c')
-rw-r--r-- | xlators/cluster/afr/src/pump.c | 66 |
1 files changed, 37 insertions, 29 deletions
diff --git a/xlators/cluster/afr/src/pump.c b/xlators/cluster/afr/src/pump.c index 5bb602bcdcf..1814c8b9ddc 100644 --- a/xlators/cluster/afr/src/pump.c +++ b/xlators/cluster/afr/src/pump.c @@ -140,9 +140,7 @@ pump_set_resume_path (xlator_t *this, const char *path) LOCK (&pump_priv->resume_path_lock); { - pump_priv->resume_path = strdup (path); - if (!pump_priv->resume_path) - ret = -1; + strncpy (pump_priv->resume_path, path, strlen (path) + 1); } UNLOCK (&pump_priv->resume_path_lock); @@ -453,7 +451,6 @@ out: if (free_entries) gf_dirent_free (&entries); return 0; - } static int @@ -2385,6 +2382,20 @@ init (xlator_t *this) ALLOC_OR_GOTO (this->private, afr_private_t, out); priv = this->private; + LOCK_INIT (&priv->lock); + LOCK_INIT (&priv->read_child_lock); + //lock recovery is not done in afr + pthread_mutex_init (&priv->mutex, NULL); + INIT_LIST_HEAD (&priv->saved_fds); + + child_count = xlator_subvolume_count (this); + if (child_count != 2) { + gf_log (this->name, GF_LOG_ERROR, + "There should be exactly 2 children - one source " + "and one sink"); + return -1; + } + priv->child_count = child_count; priv->read_child = source_child; priv->favorite_child = source_child; @@ -2410,31 +2421,9 @@ init (xlator_t *this) and the sink. */ - priv->data_lock_server_count = 2; - priv->metadata_lock_server_count = 2; - priv->entry_lock_server_count = 2; - priv->strict_readdir = _gf_false; - trav = this->children; - while (trav) { - child_count++; - trav = trav->next; - } - priv->wait_count = 1; - - if (child_count != 2) { - gf_log (this->name, GF_LOG_ERROR, - "There should be exactly 2 children - one source " - "and one sink"); - return -1; - } - priv->child_count = child_count; - - LOCK_INIT (&priv->lock); - LOCK_INIT (&priv->read_child_lock); - priv->child_up = GF_CALLOC (sizeof (unsigned char), child_count, gf_afr_mt_char); if (!priv->child_up) { @@ -2522,9 +2511,6 @@ init (xlator_t *this) priv->pump_private = pump_priv; - pthread_mutex_init (&priv->mutex, NULL); - INIT_LIST_HEAD (&priv->saved_fds); - pump_change_state (this, PUMP_STATE_ABORT); ret = 0; @@ -2535,6 +2521,28 @@ out: int fini (xlator_t *this) { + afr_private_t * priv = NULL; + pump_private_t *pump_priv = NULL; + + priv = this->private; + this->private = NULL; + if (!priv) + goto out; + + pump_priv = priv->pump_private; + if (!pump_priv) + goto afr_priv; + + if (pump_priv->env) + syncenv_destroy (pump_priv->env); + + GF_FREE (pump_priv->resume_path); + LOCK_DESTROY (&pump_priv->resume_path_lock); + LOCK_DESTROY (&pump_priv->pump_state_lock); + GF_FREE (pump_priv); +afr_priv: + afr_priv_destroy (priv); +out: return 0; } |