We can't set FExpire() on shared objects, issue #66
Former-commit-id: 2794cfced4fdb18c0860e966dde0b46b9584c4dc
This commit is contained in:
parent
11364a1147
commit
2df14dc997
13
src/db.cpp
13
src/db.cpp
@ -231,17 +231,24 @@ void dbOverwriteCore(redisDb *db, dictEntry *de, robj *key, robj *val, bool fUpd
|
|||||||
robj *old = (robj*)dictGetVal(de);
|
robj *old = (robj*)dictGetVal(de);
|
||||||
|
|
||||||
if (old->FExpires()) {
|
if (old->FExpires()) {
|
||||||
if (fRemoveExpire)
|
if (fRemoveExpire) {
|
||||||
removeExpire(db, key);
|
removeExpire(db, key);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
if (val->getrefcount(std::memory_order_relaxed) == OBJ_SHARED_REFCOUNT)
|
||||||
|
val = dupStringObject(val);
|
||||||
updateExpire(db, (sds)dictGetKey(de), old, val);
|
updateExpire(db, (sds)dictGetKey(de), old, val);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (g_pserver->maxmemory_policy & MAXMEMORY_FLAG_LFU) {
|
if (g_pserver->maxmemory_policy & MAXMEMORY_FLAG_LFU) {
|
||||||
val->lru = old->lru;
|
val->lru = old->lru;
|
||||||
}
|
}
|
||||||
if (fUpdateMvcc)
|
if (fUpdateMvcc) {
|
||||||
|
if (val->getrefcount(std::memory_order_relaxed) == OBJ_SHARED_REFCOUNT)
|
||||||
|
val = dupStringObject(val);
|
||||||
val->mvcc_tstamp = getMvccTstamp();
|
val->mvcc_tstamp = getMvccTstamp();
|
||||||
|
}
|
||||||
|
|
||||||
dictSetVal(db->pdict, de, val);
|
dictSetVal(db->pdict, de, val);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user