From a1f2ce389bc0656fd6a4492a16c23dbefb112c63 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 20 Jun 2023 14:46:32 +0800 Subject: [PATCH] fix(tsdb): fix memory leak. --- source/dnode/vnode/src/tsdb/tsdbFS2.c | 1 + source/dnode/vnode/src/tsdb/tsdbRead2.c | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index af0923a8d9..7fd5432a4e 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -703,6 +703,7 @@ int32_t tsdbFSCreateRefSnapshot(STFileSystem *fs, TFileSetArray **fsetArr) { int32_t tsdbFSDestroyRefSnapshot(TFileSetArray **fsetArr) { if (fsetArr[0]) { TARRAY2_DESTROY(fsetArr[0], tsdbTFileSetClear); + taosMemoryFreeClear(fsetArr[0]); fsetArr[0] = NULL; } return 0; diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 148a72a084..3a7fc84f6c 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -4674,7 +4674,7 @@ int32_t tsdbReaderOpen2(void* pVnode, SQueryTableDataCond* pCond, void* pTableLi _err: tsdbError("failed to create data reader, code:%s %s", tstrerror(code), idstr); - tsdbReaderClose(*ppReader); + tsdbReaderClose2(*ppReader); *ppReader = NULL; // reset the pointer value. return code; } @@ -4716,8 +4716,8 @@ void tsdbReaderClose2(STsdbReader* pReader) { p = pReader->innerReader[1]; clearSharedPtr(p); - tsdbReaderClose(pReader->innerReader[0]); - tsdbReaderClose(pReader->innerReader[1]); + tsdbReaderClose2(pReader->innerReader[0]); + tsdbReaderClose2(pReader->innerReader[1]); } } @@ -4758,7 +4758,7 @@ void tsdbReaderClose2(STsdbReader* pReader) { } qTrace("tsdb/reader-close: %p, untake snapshot", pReader); - tsdbUntakeReadSnap(pReader, pReader->pReadSnap, true); + tsdbUntakeReadSnap2(pReader, pReader->pReadSnap, true); pReader->pReadSnap = NULL; tsdbReleaseReader(pReader); @@ -5676,6 +5676,8 @@ void tsdbUntakeReadSnap2(STsdbReader* pReader, STsdbReadSnap* pSnap, bool proact if (pSnap->pNode) taosMemoryFree(pSnap->pNode); if (pSnap->pINode) taosMemoryFree(pSnap->pINode); taosMemoryFree(pSnap); + + tsdbFSDestroyRefSnapshot(&pReader->pfSetArray); } tsdbTrace("vgId:%d, untake read snapshot", TD_VID(pTsdb->pVnode)); }