From d590a38d62b5fa938f2ce0268b87b55b03ed0812 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Mon, 7 Nov 2022 17:36:58 +0800 Subject: [PATCH] fix: fix tsdbRead crash caused by reuse after free TD-20246 --- source/dnode/vnode/src/tsdb/tsdbRead.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index bfde5b3076..233a64bf77 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -364,9 +364,9 @@ static void clearBlockScanInfo(STableBlockScanInfo* p) { tMapDataClear(&p->mapData); } -static void destroyAllBlockScanInfo(SHashObj* pTableMap) { +static void destroyAllBlockScanInfo(SHashObj* pTableMap, bool clearEntry) { void* p = NULL; - while ((p = taosHashIterate(pTableMap, p)) != NULL) { + while (clearEntry && ((p = taosHashIterate(pTableMap, p)) != NULL)) { clearBlockScanInfo(*(STableBlockScanInfo**)p); } @@ -3763,7 +3763,7 @@ void tsdbReaderClose(STsdbReader* pReader) { cleanupDataBlockIterator(&pReader->status.blockIter); size_t numOfTables = taosHashGetSize(pReader->status.pTableMap); - destroyAllBlockScanInfo(pReader->status.pTableMap); + destroyAllBlockScanInfo(pReader->status.pTableMap, (pReader->innerReader[0] == NULL) ? true : false); blockDataDestroy(pReader->pResBlock); clearBlockScanInfoBuf(&pReader->blockInfoBuf);