diff options
author | antirez <antirez@gmail.com> | 2011-04-15 17:41:07 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2011-04-15 17:41:07 +0200 |
commit | 760099493752329e841b19a9578f9618daa55ef2 (patch) | |
tree | 0504ae583713eb58723a6786cc19c50d06113737 | |
parent | 6a9764d1839579d76a3eff7744fd73075dfc4844 (diff) | |
download | redis-760099493752329e841b19a9578f9618daa55ef2.tar.gz |
Revert "variadic LPUSH/RPUSH backported to 2.2"
This reverts commit c138dc7da4cf210fd70f4c7621833bd0388fce77.
Moving all the new stuff in 2.4 branch.
-rw-r--r-- | src/redis.c | 4 | ||||
-rw-r--r-- | src/t_list.c | 45 |
2 files changed, 22 insertions, 27 deletions
diff --git a/src/redis.c b/src/redis.c index 1775981b3..45be89376 100644 --- a/src/redis.c +++ b/src/redis.c @@ -85,8 +85,8 @@ struct redisCommand readonlyCommandTable[] = { {"incr",incrCommand,2,REDIS_CMD_DENYOOM,NULL,1,1,1}, {"decr",decrCommand,2,REDIS_CMD_DENYOOM,NULL,1,1,1}, {"mget",mgetCommand,-2,0,NULL,1,-1,1}, - {"rpush",rpushCommand,-3,REDIS_CMD_DENYOOM,NULL,1,1,1}, - {"lpush",lpushCommand,-3,REDIS_CMD_DENYOOM,NULL,1,1,1}, + {"rpush",rpushCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1}, + {"lpush",lpushCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1}, {"rpushx",rpushxCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1}, {"lpushx",lpushxCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1}, {"linsert",linsertCommand,5,REDIS_CMD_DENYOOM,NULL,1,1,1}, diff --git a/src/t_list.c b/src/t_list.c index 3c7509123..47c927db7 100644 --- a/src/t_list.c +++ b/src/t_list.c @@ -259,35 +259,30 @@ void listTypeConvert(robj *subject, int enc) { *----------------------------------------------------------------------------*/ void pushGenericCommand(redisClient *c, int where) { - int j, addlen = 0, pushed = 0; robj *lobj = lookupKeyWrite(c->db,c->argv[1]); - int may_have_waiting_clients = (lobj == NULL); - - if (lobj && lobj->type != REDIS_LIST) { - addReply(c,shared.wrongtypeerr); - return; - } - - for (j = 2; j < c->argc; j++) { - c->argv[j] = tryObjectEncoding(c->argv[j]); - if (may_have_waiting_clients) { - if (handleClientsWaitingListPush(c,c->argv[1],c->argv[j])) { - addlen++; - continue; - } else { - may_have_waiting_clients = 0; - } + c->argv[2] = tryObjectEncoding(c->argv[2]); + if (lobj == NULL) { + if (handleClientsWaitingListPush(c,c->argv[1],c->argv[2])) { + addReply(c,shared.cone); + return; } - if (!lobj) { - lobj = createZiplistObject(); - dbAdd(c->db,c->argv[1],lobj); + lobj = createZiplistObject(); + dbAdd(c->db,c->argv[1],lobj); + } else { + if (lobj->type != REDIS_LIST) { + addReply(c,shared.wrongtypeerr); + return; + } + if (handleClientsWaitingListPush(c,c->argv[1],c->argv[2])) { + touchWatchedKey(c->db,c->argv[1]); + addReply(c,shared.cone); + return; } - listTypePush(lobj,c->argv[j],where); - pushed++; } - addReplyLongLong(c,addlen + (lobj ? listTypeLength(lobj) : 0)); - if (pushed) touchWatchedKey(c->db,c->argv[1]); - server.dirty += pushed; + listTypePush(lobj,c->argv[2],where); + addReplyLongLong(c,listTypeLength(lobj)); + touchWatchedKey(c->db,c->argv[1]); + server.dirty++; } void lpushCommand(redisClient *c) { |