diff --git a/src/evict.c b/src/evict.c index 77f63cba..5ce5ca07 100644 --- a/src/evict.c +++ b/src/evict.c @@ -380,11 +380,10 @@ int freeMemoryIfNeeded(void) { long long delta; int slaves = listLength(server.slaves); - /* We cannot free memory while clients are paused as this will require - * evictions which modify the dataset and will break the guarantee that - * data will be static while clients are paused. */ - if (clientsArePaused()) - goto cant_free; + /* When clients are paused the dataset should be static not just from the + * POV of clients not being able to write, but also from the POV of + * expires and evictions of keys not being performed. */ + if (clientsArePaused()) return C_OK; /* Check if we are over the memory usage limit. If we are not, no need * to subtract the slaves output buffers. We can just return ASAP. */ diff --git a/src/expire.c b/src/expire.c index 14da78ec..a02fe566 100644 --- a/src/expire.c +++ b/src/expire.c @@ -105,8 +105,9 @@ void activeExpireCycle(int type) { int dbs_per_call = CRON_DBS_PER_CALL; long long start = ustime(), timelimit; - /* We cannot expire keys while clients are paused as the dataset is - * supposed to be static. */ + /* When clients are paused the dataset should be static not just from the + * POV of clients not being able to write, but also from the POV of + * expires and evictions of keys not being performed. */ if (clientsArePaused()) return; if (type == ACTIVE_EXPIRE_CYCLE_FAST) {