Fix crash with traditional expiration

Former-commit-id: 0ba5b2c3d66d3a1a520f223ad2c288c22601bd5a
This commit is contained in:
John Sully 2019-07-13 20:35:44 -04:00
parent 94645b33dd
commit 95371d60fe
2 changed files with 7 additions and 1 deletions

View File

@ -1234,7 +1234,10 @@ void setExpire(client *c, redisDb *db, robj *key, robj *subkey, long long when)
if (((robj*)dictGetVal(kde))->FExpires()) {
auto itr = db->setexpire->find((sds)dictGetKey(kde));
serverAssert(itr != db->setexpire->end());
itr->update(szSubKey, when);
expireEntry eNew(std::move(*itr));
eNew.update(szSubKey, when);
db->setexpire->erase(itr);
db->setexpire->insert(eNew);
}
else
{

View File

@ -68,7 +68,10 @@ void activeExpireCycleExpireFullKey(redisDb *db, const char *key) {
* to the function to avoid too many gettimeofday() syscalls. */
void activeExpireCycleExpire(redisDb *db, expireEntry &e, long long now) {
if (!e.FFat())
{
activeExpireCycleExpireFullKey(db, e.key());
return;
}
expireEntryFat *pfat = e.pfatentry();
dictEntry *de = dictFind(db->pdict, e.key());