From 70994b5a076db9f9981efa74324b02d49ff3d143 Mon Sep 17 00:00:00 2001 From: John Sully Date: Sun, 2 Feb 2020 23:29:20 -0500 Subject: [PATCH] RDB thread cleanup fixes Former-commit-id: 3e30cf6de930c40c3a1c63a761b2018836d4ae52 --- src/rdb.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/rdb.cpp b/src/rdb.cpp index e9263f25f..65d455416 100644 --- a/src/rdb.cpp +++ b/src/rdb.cpp @@ -1464,11 +1464,20 @@ void *rdbSaveThread(void *vargs) sendChildCOWInfo(CHILD_INFO_TYPE_RDB, "RDB"); // If we were told to cancel the requesting thread holds the lock for us + ssize_t cbStart = zmalloc_used_memory(); for (int idb = 0; idb < cserver.dbnum; ++idb) g_pserver->db[idb]->endSnapshotAsync(args->rgpdb[idb]); zfree(args); + ssize_t cbDiff = (cbStart - (ssize_t)zmalloc_used_memory()); g_pserver->garbageCollector.endEpoch(vars.gcEpoch); + if (cbDiff > 0) + { + serverLog(LL_NOTICE, + "%s: %zd MB of memory used by copy-on-write", + "RDB",cbDiff/(1024*1024)); + } + return (retval == C_OK) ? (void*)0 : (void*)1; } @@ -2658,6 +2667,11 @@ void *rdbSaveToSlavesSocketsThread(void *vargs) int retval; rio rdb; + serverAssert(serverTL == nullptr); + redisServerThreadVars vars; + serverTL = &vars; + vars.gcEpoch = g_pserver->garbageCollector.startEpoch(); + rioInitWithFd(&rdb,g_pserver->rdb_pipe_write); retval = rdbSaveRioWithEOFMark(&rdb,args->rgpdb,NULL,&args->rsi); @@ -2676,6 +2690,8 @@ void *rdbSaveToSlavesSocketsThread(void *vargs) g_pserver->db[idb]->endSnapshotAsync(args->rgpdb[idb]); zfree(args); + g_pserver->garbageCollector.endEpoch(vars.gcEpoch); + return (retval == C_OK) ? (void*)0 : (void*)1; }