diff options
author | Pieter Noordhuis <pcnoordhuis@gmail.com> | 2011-02-16 00:33:06 +0100 |
---|---|---|
committer | Pieter Noordhuis <pcnoordhuis@gmail.com> | 2011-02-16 00:33:06 +0100 |
commit | 84ea0c24616e5865150c8571cd4501cf8ecae425 (patch) | |
tree | 7527974d7c90944417bb0fcbe7b3e6de93676f06 | |
parent | f7ba093969f432b03fd846a6a61fd9b6986c8823 (diff) | |
download | redis-84ea0c24616e5865150c8571cd4501cf8ecae425.tar.gz |
Morph SPOP to SREM for correct behavior on log replay/replication
-rw-r--r-- | redis.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -5197,6 +5197,18 @@ static void spopCommand(redisClient *c) { addReply(c,shared.nullbulk); } else { robj *ele = dictGetEntryKey(de); + incrRefCount(ele); + + /* Change argv to replicate as SREM */ + c->argc = 3; + c->argv = zrealloc(c->argv,sizeof(robj*)*(c->argc)); + + /* Overwrite SREM with SPOP (same length) */ + redisAssert(sdslen(c->argv[0]->ptr) == 4); + memcpy(c->argv[0]->ptr, "SREM", 4); + + /* Popped element already has incremented refcount */ + c->argv[2] = ele; addReplyBulk(c,ele); dictDelete(set->ptr,ele); |