mirror of
http://github.com/valkey-io/valkey
synced 2024-11-22 18:54:58 +00:00
Now the PUSH side of RPOPLPUSH is able to unblock clients blocked on BLPOP
This commit is contained in:
parent
08ff05b012
commit
e20fb74f69
26
redis.c
26
redis.c
@ -3862,20 +3862,24 @@ static void rpoplpushcommand(redisClient *c) {
|
||||
robj *ele = listNodeValue(ln);
|
||||
list *dstlist;
|
||||
|
||||
if (dobj == NULL) {
|
||||
|
||||
/* Create the list if the key does not exist */
|
||||
dobj = createListObject();
|
||||
dictAdd(c->db->dict,c->argv[2],dobj);
|
||||
incrRefCount(c->argv[2]);
|
||||
} else if (dobj->type != REDIS_LIST) {
|
||||
if (dobj && dobj->type != REDIS_LIST) {
|
||||
addReply(c,shared.wrongtypeerr);
|
||||
return;
|
||||
}
|
||||
/* Add the element to the target list */
|
||||
dstlist = dobj->ptr;
|
||||
listAddNodeHead(dstlist,ele);
|
||||
incrRefCount(ele);
|
||||
|
||||
/* Add the element to the target list (unless it's directly
|
||||
* passed to some BLPOP-ing client */
|
||||
if (!handleClientsWaitingListPush(c,c->argv[2],ele)) {
|
||||
if (dobj == NULL) {
|
||||
/* Create the list if the key does not exist */
|
||||
dobj = createListObject();
|
||||
dictAdd(c->db->dict,c->argv[2],dobj);
|
||||
incrRefCount(c->argv[2]);
|
||||
}
|
||||
dstlist = dobj->ptr;
|
||||
listAddNodeHead(dstlist,ele);
|
||||
incrRefCount(ele);
|
||||
}
|
||||
|
||||
/* Send the element to the client as reply as well */
|
||||
addReplyBulkLen(c,ele);
|
||||
|
Loading…
Reference in New Issue
Block a user