summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2010-08-27 11:01:03 +0200
committerantirez <antirez@gmail.com>2010-08-27 11:01:03 +0200
commit357d36733dc37d87160ca2f65013656693290e9d (patch)
tree2ebfcf59b1fedbe27acfc0b7ba17de4b22374354
parent2df84b726983ae1f4fc9c16da61d5a0ce5114cc4 (diff)
downloadredis-357d36733dc37d87160ca2f65013656693290e9d.tar.gz
Fixed segfault in freeMemoryIfNeeded due to the fact that keys are now sds strings and not objects in the main hash table, thanks to Anthony Lauzon for spotting the bug and providing a patch.
-rw-r--r--src/redis.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/redis.c b/src/redis.c
index 9fbd52f2e..77e67c583 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -1321,7 +1321,8 @@ void freeMemoryIfNeeded(void) {
if (tryFreeOneObjectFromFreelist() == REDIS_OK) continue;
for (j = 0; j < server.dbnum; j++) {
int minttl = -1;
- robj *minkey = NULL;
+ sds minkey = NULL;
+ robj *keyobj = NULL;
struct dictEntry *de;
if (dictSize(server.db[j].expires)) {
@@ -1338,7 +1339,9 @@ void freeMemoryIfNeeded(void) {
minttl = t;
}
}
- dbDelete(server.db+j,minkey);
+ keyobj = createStringObject(minkey,sdslen(minkey));
+ dbDelete(server.db+j,keyobj);
+ decrRefCount(keyobj);
}
}
if (!freed) return; /* nothing to free... */