From: antirez Date: Thu, 11 Nov 2010 12:19:17 +0000 (+0100) Subject: volatile-lru maxmemory policy segfault fixed, thanks to Anthony Lauzon for reporting... X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/0c2f75c6d809a1658a244e74ef209dabb19fb4c7 volatile-lru maxmemory policy segfault fixed, thanks to Anthony Lauzon for reporting the problem with the patch. Original patch modified a bit in order to avoid the double lookup if the policy is allkeys-lru --- diff --git a/src/redis.c b/src/redis.c index fe656de9..cf5673a3 100644 --- a/src/redis.c +++ b/src/redis.c @@ -1372,6 +1372,10 @@ void freeMemoryIfNeeded(void) { de = dictGetRandomKey(dict); thiskey = dictGetEntryKey(de); + /* When policy is volatile-lru we need an additonal lookup + * to locate the real key, as dict is set to db->expires. */ + if (server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU) + de = dictFind(db->dict, thiskey); o = dictGetEntryVal(de); thisval = estimateObjectIdleTime(o);