diff options
Diffstat (limited to 'xlators/features/changelog/src/changelog.c')
-rw-r--r-- | xlators/features/changelog/src/changelog.c | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/xlators/features/changelog/src/changelog.c b/xlators/features/changelog/src/changelog.c index 8898d51344f..6c38293f640 100644 --- a/xlators/features/changelog/src/changelog.c +++ b/xlators/features/changelog/src/changelog.c @@ -2028,11 +2028,6 @@ changelog_cleanup_helper_threads (xlator_t *this, changelog_priv_t *priv) if (priv->cr.rollover_th) { (void) changelog_thread_cleanup (this, priv->cr.rollover_th); priv->cr.rollover_th = 0; - ret = close (priv->cr_wfd); - if (ret) - gf_log (this->name, GF_LOG_ERROR, - "error closing write end of rollover pipe" - " (reason: %s)", strerror (errno)); } if (priv->cf.fsync_th) { @@ -2047,7 +2042,6 @@ changelog_spawn_helper_threads (xlator_t *this, changelog_priv_t *priv) { int ret = 0; int flags = 0; - int pipe_fd[2] = {0, 0}; /* Geo-Rep snapshot dependency: * @@ -2061,27 +2055,7 @@ changelog_spawn_helper_threads (xlator_t *this, changelog_priv_t *priv) * the write end of the pipe in 'reconfigure'. */ - ret = pipe (pipe_fd); - if (ret == -1) { - gf_log (this->name, GF_LOG_ERROR, - "Cannot create pipe (reason: %s)", strerror (errno)); - goto out; - } - - /* writer is non-blocking */ - flags = fcntl (pipe_fd[1], F_GETFL); - flags |= O_NONBLOCK; - - ret = fcntl (pipe_fd[1], F_SETFL, flags); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, - "failed to set O_NONBLOCK flag"); - goto out; - } - - priv->cr_wfd = pipe_fd[1]; - priv->cr.rfd = pipe_fd[0]; - + priv->cr.notify = _gf_false; priv->cr.this = this; ret = gf_thread_create (&priv->cr.rollover_th, NULL, changelog_rollover, priv); @@ -2384,6 +2358,8 @@ changelog_barrier_pthread_init (xlator_t *this, changelog_priv_t *priv) gf_boolean_t dm_cond_black_init = _gf_false; gf_boolean_t dm_mutex_white_init = _gf_false; gf_boolean_t dm_cond_white_init = _gf_false; + gf_boolean_t cr_mutex_init = _gf_false; + gf_boolean_t cr_cond_init = _gf_false; int ret = 0; if ((ret = pthread_mutex_init(&priv->bn.bnotify_mutex, NULL)) != 0) { @@ -2435,6 +2411,22 @@ changelog_barrier_pthread_init (xlator_t *this, changelog_priv_t *priv) goto out; } dm_cond_white_init = _gf_true; + + if ((pthread_mutex_init(&priv->cr.lock, NULL)) != 0) { + gf_log (this->name, GF_LOG_ERROR, + "changelog_rollover lock init failed (%d)", ret); + ret = -1; + goto out; + } + cr_mutex_init = _gf_true; + + if ((pthread_cond_init(&priv->cr.cond, NULL)) != 0) { + gf_log (this->name, GF_LOG_ERROR, + "changelog_rollover cond init failed (%d)", ret); + ret = -1; + goto out; + } + cr_cond_init = _gf_true; out: if (ret) { if (bn_mutex_init) @@ -2449,6 +2441,10 @@ changelog_barrier_pthread_init (xlator_t *this, changelog_priv_t *priv) pthread_mutex_destroy(&priv->dm.drain_white_mutex); if (dm_cond_white_init) pthread_cond_destroy (&priv->dm.drain_white_cond); + if (cr_mutex_init) + pthread_mutex_destroy(&priv->cr.lock); + if (cr_cond_init) + pthread_cond_destroy (&priv->cr.cond); } return ret; } @@ -2463,6 +2459,8 @@ changelog_barrier_pthread_destroy (changelog_priv_t *priv) pthread_cond_destroy (&priv->dm.drain_black_cond); pthread_mutex_destroy (&priv->dm.drain_white_mutex); pthread_cond_destroy (&priv->dm.drain_white_cond); + pthread_mutex_destroy(&priv->cr.lock); + pthread_cond_destroy (&priv->cr.cond); LOCK_DESTROY (&priv->bflags.lock); } @@ -2786,6 +2784,7 @@ init (xlator_t *this) priv->current_color = FOP_COLOR_BLACK; priv->explicit_rollover = _gf_false; + priv->cr.notify = _gf_false; /* Mutex is not needed as threads are not spawned yet */ priv->bn.bnotify = _gf_false; priv->bn.bnotify_error = _gf_false; |