diff --git a/src/server.c b/src/server.c index 69e13c60..b96c4fe7 100644 --- a/src/server.c +++ b/src/server.c @@ -2402,6 +2402,12 @@ int processCommand(client *c) { * is returning an error. */ if (server.maxmemory) { int retval = freeMemoryIfNeeded(); + /* freeMemoryIfNeeded may flush slave output buffers. This may result + * into a slave, that may be the active client, to be freed. */ + if (server.current_client == NULL) return C_ERR; + + /* It was impossible to free enough memory, and the command the client + * is trying to execute is denied during OOM conditions? Error. */ if ((c->cmd->flags & CMD_DENYOOM) && retval == C_ERR) { flagTransaction(c); addReply(c, shared.oomerr);