X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/ee61a4b99ee56203edb746c666fa89f88c2d0afa..2d04eef425ab912c33c1b51a4f0018ae72809dae:/src/rdb.c diff --git a/src/rdb.c b/src/rdb.c index 4a56659d..1e23fa70 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -856,17 +856,20 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) { if (value == NULL) return NULL; redisAssert(field->encoding == REDIS_ENCODING_RAW); + /* Add pair to ziplist */ + o->ptr = ziplistPush(o->ptr, field->ptr, sdslen(field->ptr), ZIPLIST_TAIL); + o->ptr = ziplistPush(o->ptr, value->ptr, sdslen(value->ptr), ZIPLIST_TAIL); /* Convert to hash table if size threshold is exceeded */ if (sdslen(field->ptr) > server.hash_max_ziplist_value || sdslen(value->ptr) > server.hash_max_ziplist_value) { + decrRefCount(field); + decrRefCount(value); hashTypeConvert(o, REDIS_ENCODING_HT); break; } - - /* Add pair to ziplist */ - o->ptr = ziplistPush(o->ptr, field->ptr, sdslen(field->ptr), ZIPLIST_TAIL); - o->ptr = ziplistPush(o->ptr, value->ptr, sdslen(value->ptr), ZIPLIST_TAIL); + decrRefCount(field); + decrRefCount(value); } /* Load remaining fields and values into the hash table */