From 1705e42eb2cc4e7c68a09c77f15c3d99b78b4ec1 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 5 Sep 2018 13:10:05 +0200 Subject: [PATCH] Don't perform eviction when re-entering the event loop. Related to #5250. --- src/server.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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. */