summaryrefslogtreecommitdiff
path: root/src/db.c
diff options
context:
space:
mode:
authorViktor Söderqvist <viktor.soderqvist@est.tech>2023-01-11 09:57:10 +0100
committerViktor Söderqvist <viktor.soderqvist@est.tech>2023-01-11 09:59:24 +0100
commitc84248b5d2fba04e5056bad32a5d29a5fc906e8c (patch)
treeeb124954279832505715f2a76d2634ac99d8550e /src/db.c
parent25dc3b07571469a5fb004aa817a3852ade2f840f (diff)
downloadredis-c84248b5d2fba04e5056bad32a5d29a5fc906e8c.tar.gz
Make dictEntry opaque
Use functions for all accesses to dictEntry (except in dict.c). Dict abuses e.g. in defrag.c have been replaced by support functions provided by dict.
Diffstat (limited to 'src/db.c')
-rw-r--r--src/db.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/db.c b/src/db.c
index aad822630..abe717ace 100644
--- a/src/db.c
+++ b/src/db.c
@@ -228,7 +228,6 @@ static void dbSetValue(redisDb *db, robj *key, robj *val, int overwrite) {
dictEntry *de = dictFind(db->dict,key->ptr);
serverAssertWithInfo(NULL,key,de != NULL);
- dictEntry auxentry = *de;
robj *old = dictGetVal(de);
if (server.maxmemory_policy & MAXMEMORY_FLAG_LFU) {
val->lru = old->lru;
@@ -246,17 +245,15 @@ static void dbSetValue(redisDb *db, robj *key, robj *val, int overwrite) {
decrRefCount(old);
/* Because of RM_StringDMA, old may be changed, so we need get old again */
old = dictGetVal(de);
- /* Entry in auxentry may be changed, so we need update auxentry */
- auxentry = *de;
}
dictSetVal(db->dict, de, val);
if (server.lazyfree_lazy_server_del) {
freeObjAsync(key,old,db->id);
- dictSetVal(db->dict, &auxentry, NULL);
+ } else {
+ /* This is just decrRefCount(old); */
+ db->dict->type->valDestructor(db->dict, old);
}
-
- dictFreeVal(db->dict, &auxentry);
}
/* Replace an existing key with a new value, we just replace value and don't