summaryrefslogtreecommitdiff
path: root/src/t_set.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2015-02-09 23:44:42 +0100
committerantirez <antirez@gmail.com>2015-02-11 10:52:27 +0100
commitcc7f0434b5c590e5a61c3cefa6ed9fb193d021dd (patch)
tree81fdf4ddb46382a5c893f35f34185acffd59ecaf /src/t_set.c
parent6b5922dcbbfe5428accc093892ff330211acf5d7 (diff)
downloadredis-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.c12
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);
}