Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Use correct argc/argv for cleanup when loading AOF

  • Loading branch information...
commit bf3692797df817c3abfd430a017f55ce9c9ecf87 1 parent da06854
@pietern pietern authored
Showing with 23 additions and 3 deletions.
  1. +5 −3 src/aof.c
  2. +18 −0 tests/integration/aof.tcl
View
8 src/aof.c
@@ -285,9 +285,11 @@ int loadAppendOnlyFile(char *filename) {
/* The fake client should not have a reply */
redisAssert(fakeClient->bufpos == 0 && listLength(fakeClient->reply) == 0);
- /* Clean up, ready for the next command */
- for (j = 0; j < argc; j++) decrRefCount(argv[j]);
- zfree(argv);
+ /* Clean up. Command code may have changed argv/argc so we use the
+ * argv/argc of the client instead of the local variables. */
+ for (j = 0; j < fakeClient->argc; j++)
+ decrRefCount(fakeClient->argv[j]);
+ zfree(fakeClient->argv);
/* Handle swapping while loading big datasets when VM is on */
force_swapout = 0;
View
18 tests/integration/aof.tcl
@@ -83,4 +83,22 @@ tags {"aof"} {
assert_equal "" [$client get bar]
}
}
+
+ ## Test that SPOP (that modifies the client its argc/argv) is correctly free'd
+ create_aof {
+ append_to_aof [formatCommand sadd set foo]
+ append_to_aof [formatCommand sadd set bar]
+ append_to_aof [formatCommand spop set]
+ }
+
+ start_server_aof [list dir $server_path] {
+ test "AOF+SPOP: Server should have been started" {
+ assert_equal 1 [is_alive $srv]
+ }
+
+ test "AOF+SPOP: Set should have 1 member" {
+ set client [redis [dict get $srv host] [dict get $srv port]]
+ assert_equal 1 [$client scard set]
+ }
+ }
}
Please sign in to comment.
Something went wrong with that request. Please try again.