diff options
author | antirez <antirez@gmail.com> | 2015-02-09 23:44:42 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2015-02-11 10:52:27 +0100 |
commit | cc7f0434b5c590e5a61c3cefa6ed9fb193d021dd (patch) | |
tree | 81fdf4ddb46382a5c893f35f34185acffd59ecaf /src/t_set.c | |
parent | 6b5922dcbbfe5428accc093892ff330211acf5d7 (diff) | |
download | redis-cc7f0434b5c590e5a61c3cefa6ed9fb193d021dd.tar.gz |
Change alsoPropagate() behavior to make it more usable.
Now the API automatically creates its argv copy and increment ref count
of passed objects.
Diffstat (limited to 'src/t_set.c')
-rw-r--r-- | src/t_set.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/t_set.c b/src/t_set.c index 619b0f8a6..47aa173a1 100644 --- a/src/t_set.c +++ b/src/t_set.c @@ -556,10 +556,12 @@ void spopWithCountCommand(redisClient *c) { { setTypeIterator *si; - robj *objele, **propargv; + robj *objele, *propargv[3]; int element_encoding; addReplyMultiBulkLen(c, elements_returned); + propargv[0] = createStringObject("SREM",4); + propargv[1] = c->argv[1]; si = setTypeInitIterator(aux_set); while ((element_encoding = setTypeNext(si, &objele, &llele)) != -1) { @@ -574,17 +576,13 @@ void spopWithCountCommand(redisClient *c) { addReplyBulk(c, objele); /* Replicate/AOF this command as an SREM operation */ - propargv = zmalloc(sizeof(robj*)*3); - propargv[0] = createStringObject("SREM",4); - propargv[1] = c->argv[1]; - incrRefCount(c->argv[1]); propargv[2] = objele; - incrRefCount(objele); - alsoPropagate(server.sremCommand,c->db->id,propargv,3,REDIS_PROPAGATE_AOF|REDIS_PROPAGATE_REPL); + decrRefCount(objele); server.dirty++; } + decrRefCount(propargv[0]); setTypeReleaseIterator(si); } |