From 1dcec6e77af1ec925c816e0f3a38e6c66dba1f82 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Thu, 4 Apr 2019 11:51:59 +0200 Subject: [PATCH] RedisConnection#SendMessageInternal(): lock only while actually using shared objects --- lib/redis/redisconnection.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/redis/redisconnection.cpp b/lib/redis/redisconnection.cpp index c55399def..7bf477980 100644 --- a/lib/redis/redisconnection.cpp +++ b/lib/redis/redisconnection.cpp @@ -200,12 +200,14 @@ void RedisConnection::SendMessageInternal(const std::vector& query, redi { AssertOnWorkQueue(); - boost::mutex::scoped_lock lock(m_CMutex); + { + boost::mutex::scoped_lock lock(m_CMutex); - if (!m_Context || !m_Connected) { - Log(LogCritical, "RedisWriter") - << "Not connected to Redis"; - return; + if (!m_Context || !m_Connected) { + Log(LogCritical, "RedisWriter") + << "Not connected to Redis"; + return; + } } const char **argv; @@ -224,7 +226,14 @@ void RedisConnection::SendMessageInternal(const std::vector& query, redi Log(LogDebug, "RedisWriter, Connection") << "Sending Command: " << debugstr; - int r = redisAsyncCommandArgv(m_Context, fn, privdata, query.size(), argv, argvlen); + + int r; + + { + boost::mutex::scoped_lock lock(m_CMutex); + + r = redisAsyncCommandArgv(m_Context, fn, privdata, query.size(), argv, argvlen); + } delete[] argv; delete[] argvlen;