From 34bd44187ae4a5947995abe8f8e26a5dacb3159b Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 11 Jun 2018 16:51:06 +0200 Subject: [PATCH] Fix client unblocking for XREADGROUP, issue #4978. We unblocked the client too early, when the group name object was no longer valid in client->bpop, so propagating XCLAIM later in streamPropagateXCLAIM() deferenced a field already set to NULL. --- src/blocked.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/blocked.c b/src/blocked.c index 8d1157c2..e0dd5672 100644 --- a/src/blocked.c +++ b/src/blocked.c @@ -398,12 +398,6 @@ void handleClientsBlockedOnKeys(void) { 1); } - /* Note that after we unblock the client, 'gt' - * and other receiver->bpop stuff are no longer - * valid, so we must do the setup above before - * this call. */ - unblockClient(receiver); - /* Emit the two elements sub-array consisting of * the name of the stream and the data we * extracted from it. Wrapped in a single-item @@ -419,6 +413,12 @@ void handleClientsBlockedOnKeys(void) { streamReplyWithRange(receiver,s,&start,NULL, receiver->bpop.xread_count, 0, group, consumer, 0, &pi); + + /* Note that after we unblock the client, 'gt' + * and other receiver->bpop stuff are no longer + * valid, so we must do the setup above before + * this call. */ + unblockClient(receiver); } } }