diff options
Diffstat (limited to 'xlators/protocol/server/src/server-helpers.c')
-rw-r--r-- | xlators/protocol/server/src/server-helpers.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c index 2df463a9c..12951a798 100644 --- a/xlators/protocol/server/src/server-helpers.c +++ b/xlators/protocol/server/src/server-helpers.c @@ -1017,7 +1017,7 @@ gf_barrier_dequeue (gf_barrier_t *barrier) } -void +void* gf_barrier_dequeue_start (void *data) { server_conf_t *conf = NULL; @@ -1026,7 +1026,7 @@ gf_barrier_dequeue_start (void *data) conf = (server_conf_t *)data; if (!conf || !conf->barrier) - return; + return NULL; barrier = conf->barrier; LOCK (&barrier->lock); @@ -1043,7 +1043,7 @@ gf_barrier_dequeue_start (void *data) } } UNLOCK (&barrier->lock); - return; + return NULL; } void @@ -1149,7 +1149,14 @@ gf_barrier_stop (xlator_t *this) if (need_dequeue == _gf_true) { gf_timer_call_cancel (this->ctx, barrier->timer); - gf_barrier_dequeue_start (conf); + ret = gf_thread_create (&conf->barrier_th, NULL, + gf_barrier_dequeue_start, + conf); + if (ret) { + gf_log (this->name, GF_LOG_CRITICAL, + "Failed to start un-barriering"); + goto out; + } } ret = 0; out: |