RedisConnection#SendMessageInternal(): lock only while actually using shared objects

This commit is contained in:
Alexander A. Klimov 2019-04-04 11:51:59 +02:00 committed by Michael Friedrich
parent 50594ec1c8
commit 1dcec6e77a
1 changed files with 15 additions and 6 deletions

View File

@ -200,6 +200,7 @@ void RedisConnection::SendMessageInternal(const std::vector<String>& query, redi
{
AssertOnWorkQueue();
{
boost::mutex::scoped_lock lock(m_CMutex);
if (!m_Context || !m_Connected) {
@ -207,6 +208,7 @@ void RedisConnection::SendMessageInternal(const std::vector<String>& query, redi
<< "Not connected to Redis";
return;
}
}
const char **argv;
size_t *argvlen;
@ -224,7 +226,14 @@ void RedisConnection::SendMessageInternal(const std::vector<String>& 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;