X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/9e83ac06ef1c978c65fefc1fbf5af1e95f31fe15..cb16b6c3899d0696a7e633c29f764e06b222b2fe:/src/multi.c diff --git a/src/multi.c b/src/multi.c index 47615eb0..ba3a0cd6 100644 --- a/src/multi.c +++ b/src/multi.c @@ -65,12 +65,10 @@ void discardCommand(redisClient *c) { /* Send a MULTI command to all the slaves and AOF file. Check the execCommand * implememntation for more information. */ void execCommandReplicateMulti(redisClient *c) { - struct redisCommand *cmd; robj *multistring = createStringObject("MULTI",5); - cmd = lookupCommand("multi"); if (server.appendonly) - feedAppendOnlyFile(cmd,c->db->id,&multistring,1); + feedAppendOnlyFile(server.multiCommand,c->db->id,&multistring,1); if (listLength(server.slaves)) replicationFeedSlaves(server.slaves,c->db->id,&multistring,1); decrRefCount(multistring); @@ -112,6 +110,10 @@ void execCommand(redisClient *c) { c->argc = c->mstate.commands[j].argc; c->argv = c->mstate.commands[j].argv; call(c,c->mstate.commands[j].cmd); + + /* Commands may alter argc/argv, restore mstate. */ + c->mstate.commands[j].argc = c->argc; + c->mstate.commands[j].argv = c->argv; } c->argv = orig_argv; c->argc = orig_argc;