diff --git a/src/blocked.c b/src/blocked.c index ef0d5246de0ccb4bda8b75757d35bd96fa9d90c7..3509dd13449c78548504d8e7d8025eebdd81719c 100644 --- a/src/blocked.c +++ b/src/blocked.c @@ -114,7 +114,6 @@ void processUnblockedClients(void) { c = ln->value; listDelNode(server.unblocked_clients,ln); c->flags &= ~REDIS_UNBLOCKED; - c->btype = REDIS_BLOCKED_NONE; /* Process remaining data in the input buffer. */ if (c->querybuf && sdslen(c->querybuf) > 0) { diff --git a/src/networking.c b/src/networking.c index 5c8f56dbf55037fa2bf381c641c9a8bc5bf72a4e..ba35e487c3fad24cb0ad9e0b0b708c4cd0f9e125 100644 --- a/src/networking.c +++ b/src/networking.c @@ -1676,7 +1676,9 @@ void pauseClients(mstime_t end) { /* Return non-zero if clients are currently paused. As a side effect the * function checks if the pause time was reached and clear it. */ int clientsArePaused(void) { - if (server.clients_paused && server.clients_pause_end_time < server.mstime) { + if (server.clients_paused && + server.clients_pause_end_time < server.mstime) + { listNode *ln; listIter li; redisClient *c; @@ -1689,7 +1691,10 @@ int clientsArePaused(void) { while ((ln = listNext(&li)) != NULL) { c = listNodeValue(ln); + /* Don't touch slaves and blocked clients. The latter pending + * requests be processed when unblocked. */ if (c->flags & (REDIS_SLAVE|REDIS_BLOCKED)) continue; + c->flags |= REDIS_UNBLOCKED; listAddNodeTail(server.unblocked_clients,c); } }