diff --git a/src/expire.c b/src/expire.c index b05bf9f14..637139f63 100644 --- a/src/expire.c +++ b/src/expire.c @@ -315,8 +315,17 @@ void expireSlaveKeys(void) { /* Track keys that received an EXPIRE or similar command in the context * of a writable slave. */ void rememberSlaveKeyWithExpire(redisDb *db, robj *key) { - if (slaveKeysWithExpire == NULL) - slaveKeysWithExpire = dictCreate(&keyptrDictType,NULL); + if (slaveKeysWithExpire == NULL) { + static dictType dt = { + dictSdsHash, /* hash function */ + NULL, /* key dup */ + NULL, /* val dup */ + dictSdsKeyCompare, /* key compare */ + dictSdsDestructor, /* key destructor */ + NULL /* val destructor */ + }; + slaveKeysWithExpire = dictCreate(&dt,NULL); + } if (db->id > 63) return; dictEntry *de = dictAddOrFind(slaveKeysWithExpire,key->ptr); diff --git a/src/server.h b/src/server.h index 5d3be585a..2a61ea419 100644 --- a/src/server.h +++ b/src/server.h @@ -1742,6 +1742,11 @@ void evictionPoolAlloc(void); unsigned long LFUGetTimeInMinutes(void); uint8_t LFULogIncr(uint8_t value); +/* Keys hashing / comparison functions for dict.c hash tables. */ +unsigned int dictSdsHash(const void *key); +int dictSdsKeyCompare(void *privdata, const void *key1, const void *key2); +void dictSdsDestructor(void *privdata, void *val); + /* Git SHA1 */ char *redisGitSHA1(void); char *redisGitDirty(void);