diff --git a/src/server.c b/src/server.c index 55bcb4dc..fd8472f6 100644 --- a/src/server.c +++ b/src/server.c @@ -2593,8 +2593,13 @@ int processCommand(client *c) { * * First we try to free some memory if possible (if there are volatile * keys in the dataset). If there are not the only thing we can do - * is returning an error. */ - if (server.maxmemory) { + * is returning an error. + * + * Note that we do not want to reclaim memory if we are here re-entering + * the event loop since there is a busy Lua script running in timeout + * condition, to avoid mixing the propagation of scripts with the propagation + * of DELs due to eviction. */ + if (server.maxmemory && !server.lua_timedout) { int out_of_memory = freeMemoryIfNeeded() == C_ERR; /* freeMemoryIfNeeded may flush slave output buffers. This may result * into a slave, that may be the active client, to be freed. */