summaryrefslogtreecommitdiffstats
path: root/xlators/features/changelog/src/changelog.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/features/changelog/src/changelog.c')
-rw-r--r--xlators/features/changelog/src/changelog.c53
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;