Don't perform eviction when re-entering the event loop.

Related to #5250.
This commit is contained in:
antirez 2018-09-05 13:10:05 +02:00
parent 4e5e0d3719
commit 51b627d916

View File

@ -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. */