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;  }  | 
