From aa47e643b0df8db58e809388d9de26f6e79aacb6 Mon Sep 17 00:00:00 2001 From: John Sully Date: Sun, 7 Feb 2021 23:38:09 +0000 Subject: [PATCH] Fix memory leak in mvccRestore Former-commit-id: 165333b0fc648c79e66f04d9c8c4a1d0059fe57a --- src/Makefile | 4 ++-- src/cluster.cpp | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Makefile b/src/Makefile index 3af99b3b4..9e4070d4a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -48,8 +48,8 @@ endif USEASM?=true ifneq ($(strip $(SANITIZE)),) - CFLAGS+= -fsanitize=$(SANITIZE) -DSANITIZE - CXXFLAGS+= -fsanitize=$(SANITIZE) -DSANITIZE + CFLAGS+= -fsanitize=$(SANITIZE) -DSANITIZE -fno-omit-frame-pointer + CXXFLAGS+= -fsanitize=$(SANITIZE) -DSANITIZE -fno-omit-frame-pointer LDFLAGS+= -fsanitize=$(SANITIZE) MALLOC=libc USEASM=false diff --git a/src/cluster.cpp b/src/cluster.cpp index e60807180..8556f1d28 100644 --- a/src/cluster.cpp +++ b/src/cluster.cpp @@ -5066,12 +5066,15 @@ void mvccrestoreCommand(client *c) { setMvccTstamp(obj, mvcc); /* Create the key and set the TTL if any */ - dbMerge(c->db,key,obj,true); - if (expire >= 0) { - setExpire(c,c->db,key,nullptr,expire); + if (dbMerge(c->db,key,obj,true)) { + if (expire >= 0) { + setExpire(c,c->db,key,nullptr,expire); + } + signalModifiedKey(c,c->db,key); + notifyKeyspaceEvent(NOTIFY_GENERIC,"restore",key,c->db->id); + } else { + decrRefCount(obj); } - signalModifiedKey(c,c->db,key); - notifyKeyspaceEvent(NOTIFY_GENERIC,"restore",key,c->db->id); addReply(c,shared.ok); g_pserver->dirty++; }