diff --git a/src/cluster.c b/src/cluster.c index 77ec2f1b..407ddee8 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -5418,8 +5418,9 @@ int clusterRedirectBlockedClientIfNeeded(client *c) { return 1; } + /* All keys must belong to the same slot, so check first key only. */ di = dictGetIterator(c->bpop.keys); - while((de = dictNext(di)) != NULL) { + if ((de = dictNext(di)) != NULL) { robj *key = dictGetKey(de); int slot = keyHashSlot((char*)key->ptr, sdslen(key->ptr)); clusterNode *node = server.cluster->slots[slot]; @@ -5437,6 +5438,7 @@ int clusterRedirectBlockedClientIfNeeded(client *c) { clusterRedirectClient(c,node,slot, CLUSTER_REDIR_MOVED); } + dictReleaseIterator(di); return 1; } } diff --git a/src/server.c b/src/server.c index a3c13284..46e5bb9f 100644 --- a/src/server.c +++ b/src/server.c @@ -152,7 +152,7 @@ struct redisCommand redisCommandTable[] = { {"linsert",linsertCommand,5,"wm",0,NULL,1,1,1,0,0}, {"rpop",rpopCommand,2,"wF",0,NULL,1,1,1,0,0}, {"lpop",lpopCommand,2,"wF",0,NULL,1,1,1,0,0}, - {"brpop",brpopCommand,-3,"ws",0,NULL,1,1,1,0,0}, + {"brpop",brpopCommand,-3,"ws",0,NULL,1,-2,1,0,0}, {"brpoplpush",brpoplpushCommand,4,"wms",0,NULL,1,2,1,0,0}, {"blpop",blpopCommand,-3,"ws",0,NULL,1,-2,1,0,0}, {"llen",llenCommand,2,"rF",0,NULL,1,1,1,0,0},