"vscode:/vscode.git/clone" did not exist on "2860cf4139827c2791c5f79324555d7acf150243"
Commit e20fb74f authored by antirez's avatar antirez
Browse files

Now the PUSH side of RPOPLPUSH is able to unblock clients blocked on BLPOP

parent 08ff05b0
...@@ -3862,20 +3862,24 @@ static void rpoplpushcommand(redisClient *c) { ...@@ -3862,20 +3862,24 @@ static void rpoplpushcommand(redisClient *c) {
robj *ele = listNodeValue(ln); robj *ele = listNodeValue(ln);
list *dstlist; list *dstlist;
if (dobj == NULL) { if (dobj && dobj->type != REDIS_LIST) {
addReply(c,shared.wrongtypeerr);
return;
}
/* 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 */ /* Create the list if the key does not exist */
dobj = createListObject(); dobj = createListObject();
dictAdd(c->db->dict,c->argv[2],dobj); dictAdd(c->db->dict,c->argv[2],dobj);
incrRefCount(c->argv[2]); incrRefCount(c->argv[2]);
} else if (dobj->type != REDIS_LIST) {
addReply(c,shared.wrongtypeerr);
return;
} }
/* Add the element to the target list */
dstlist = dobj->ptr; dstlist = dobj->ptr;
listAddNodeHead(dstlist,ele); listAddNodeHead(dstlist,ele);
incrRefCount(ele); incrRefCount(ele);
}
/* Send the element to the client as reply as well */ /* Send the element to the client as reply as well */
addReplyBulkLen(c,ele); addReplyBulkLen(c,ele);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment