From ddaac7a7d9fba1eae5d964b64a2ae9eddde3c325 Mon Sep 17 00:00:00 2001 From: Bryan Dallas Date: Tue, 1 Sep 2015 11:01:25 -0400 Subject: [PATCH] Added more instances of correct locking while reading the connect_state_ variable. --- src/client.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index e8dd98b..9ff5dbb 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -148,8 +148,12 @@ void Redox::connectedCallback(const redisAsyncContext *ctx, int status) { } rdx->connect_waiter_.notify_all(); + { + unique_lock lk(rdx->connect_lock_); + int state = rdx->connect_state_; + } if (rdx->user_connection_callback_) - rdx->user_connection_callback_(rdx->connect_state_); + rdx->user_connection_callback_(state); } void Redox::disconnectedCallback(const redisAsyncContext *ctx, int status) { @@ -168,8 +172,12 @@ void Redox::disconnectedCallback(const redisAsyncContext *ctx, int status) { rdx->stop(); rdx->connect_waiter_.notify_all(); + { + unique_lock lk(rdx->connect_lock_); + int state = rdx->connect_state_; + } if (rdx->user_connection_callback_) - rdx->user_connection_callback_(rdx->connect_state_); + rdx->user_connection_callback_(state); } bool Redox::initEv() { @@ -317,8 +325,11 @@ void Redox::runEventLoop() { this_thread::sleep_for(chrono::milliseconds(10)); ev_run(evloop_, EVRUN_NOWAIT); - if (connect_state_ == CONNECTED) - redisAsyncDisconnect(ctx_); + { + unique_lock ul(connect_lock_); + if (connect_state_ == CONNECTED) + redisAsyncDisconnect(ctx_); + } // Run once more to disconnect ev_run(evloop_, EVRUN_NOWAIT); -- libgit2 0.21.4