From 36424b8e0f6dbf7a7619592f2c20384c8dde48ff Mon Sep 17 00:00:00 2001 From: Huang Zhw Date: Sun, 28 Mar 2021 20:16:30 +0800 Subject: [PATCH] Remove redundant defrag dictEntry in activeDefragSdsListAndDict. (#8713) In activeDefragSdsListAndDict when defrag list key sucess, the key in dict is also replaced. Then the corresponding dictEntry is defraged. But the dictEntry will be defraged in next step by defrag the dict values too. --- src/defrag.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/defrag.c b/src/defrag.c index 2b28d523d..3dfb8679c 100644 --- a/src/defrag.c +++ b/src/defrag.c @@ -347,7 +347,9 @@ long activeDefragSdsListAndDict(list *l, dict *d, int dict_val_type) { if ((newsds = activeDefragSds(sdsele))) { /* When defragging an sds value, we need to update the dict key */ uint64_t hash = dictGetHash(d, newsds); - replaceSatelliteDictKeyPtrAndOrDefragDictEntry(d, sdsele, newsds, hash, &defragged); + dictEntry **deref = dictFindEntryRefByPtrAndHash(d, sdsele, hash); + if (deref) + (*deref)->key = newsds; ln->value = newsds; defragged++; }