From 7630b63f06740b5a04bd8c8f2bf38e46188e9181 Mon Sep 17 00:00:00 2001 From: John Sully Date: Sun, 24 May 2020 11:19:23 -0400 Subject: [PATCH] Hold the AE lock until we process the repl backlog after a command Former-commit-id: 4893eedacbf5f9210d02361ed07b9beee0c9f655 --- src/networking.cpp | 3 ++- src/server.cpp | 3 +-- src/server.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/networking.cpp b/src/networking.cpp index dbef33655..58ca4f86b 100644 --- a/src/networking.cpp +++ b/src/networking.cpp @@ -2326,7 +2326,8 @@ void commandProcessed(client *c) { int processCommandAndResetClient(client *c, int flags) { int deadclient = 0; serverTL->current_client = c; - if (processCommand(c, flags) == C_OK) { + AeLocker locker; + if (processCommand(c, flags, locker) == C_OK) { commandProcessed(c); } if (serverTL->current_client == NULL) deadclient = 1; diff --git a/src/server.cpp b/src/server.cpp index ddebe3ac8..8566dd7f0 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3621,8 +3621,7 @@ void call(client *c, int flags) { * If C_OK is returned the client is still alive and valid and * other operations can be performed by the caller. Otherwise * if C_ERR is returned the client was destroyed (i.e. after QUIT). */ -int processCommand(client *c, int callFlags) { - AeLocker locker; +int processCommand(client *c, int callFlags, AeLocker &locker) { AssertCorrectThread(c); if (moduleHasCommandFilters()) diff --git a/src/server.h b/src/server.h index e3c62796b..628e1d3b9 100644 --- a/src/server.h +++ b/src/server.h @@ -2542,7 +2542,7 @@ int getMaxmemoryState(size_t *total, size_t *logical, size_t *tofree, float *lev size_t freeMemoryGetNotCountedMemory(); int freeMemoryIfNeeded(void); int freeMemoryIfNeededAndSafe(void); -int processCommand(client *c, int callFlags); +int processCommand(client *c, int callFlags, class AeLocker &locker); void setupSignalHandlers(void); struct redisCommand *lookupCommand(sds name); struct redisCommand *lookupCommandByCString(const char *s);