From 14a2360f5e4d089802ec224181002111cfefdaa1 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 13 Aug 2024 15:22:06 +0800 Subject: [PATCH 1/3] fix(tsdb): check null ptr when un-referencing snapshot. --- source/dnode/vnode/src/tsdb/tsdbRead2.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 880e73c5c0..9356973958 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -5827,9 +5827,12 @@ int32_t tsdbTakeReadSnap2(STsdbReader* pReader, _query_reseek_func_t reseek, STs pSnap->pIMem = pTsdb->imem; pSnap->pINode = taosMemoryMalloc(sizeof(*pSnap->pINode)); if (pSnap->pINode == NULL) { - tsdbUnrefMemTable(pTsdb->mem, pSnap->pNode, true); // unref the previous refed mem code = terrno; + if (pTsdb->mem && pSnap->pNode) { + tsdbUnrefMemTable(pTsdb->mem, pSnap->pNode, true); // unref the previous refed mem + } + (void) taosThreadMutexUnlock(&pTsdb->mutex); goto _exit; } From b2537421558eb6addb7ab5467ded01ee920df1b9 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 13 Aug 2024 15:49:20 +0800 Subject: [PATCH 2/3] fix(tsdb): check return value. --- source/dnode/vnode/src/tsdb/tsdbRead2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 3d8db2621c..0019b15b40 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -5829,7 +5829,7 @@ int32_t tsdbTakeReadSnap2(STsdbReader* pReader, _query_reseek_func_t reseek, STs code = terrno; if (pTsdb->mem && pSnap->pNode) { - tsdbUnrefMemTable(pTsdb->mem, pSnap->pNode, true); // unref the previous refed mem + (void) tsdbUnrefMemTable(pTsdb->mem, pSnap->pNode, true); // unref the previous refed mem } (void) taosThreadMutexUnlock(&pTsdb->mutex); From 27b0e285c74d6f46b1274102b765dd0730d2eaba Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 13 Aug 2024 18:39:07 +0800 Subject: [PATCH 3/3] fix(tsdb): release the reader when encountering errors. --- source/dnode/vnode/src/tsdb/tsdbRead2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 0019b15b40..6783eb2cbd 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -5187,6 +5187,7 @@ int32_t tsdbNextDataBlock2(STsdbReader* pReader, bool* hasNext) { resetAllDataBlockScanInfo(pReader->status.pTableMap, pReader->innerReader[0]->info.window.ekey, step); if (code != TSDB_CODE_SUCCESS) { + (void) tsdbReleaseReader(pReader); return code; } @@ -5213,6 +5214,7 @@ int32_t tsdbNextDataBlock2(STsdbReader* pReader, bool* hasNext) { code = doOpenReaderImpl(pReader->innerReader[1]); resetAllDataBlockScanInfo(pReader->innerReader[1]->status.pTableMap, pReader->info.window.ekey, step); if (code != TSDB_CODE_SUCCESS) { + (void) tsdbReleaseReader(pReader); return code; } @@ -5493,6 +5495,7 @@ int32_t tsdbReaderReset2(STsdbReader* pReader, SQueryTableDataCond* pCond) { code = initFilesetIterator(&pStatus->fileIter, pReader->pReadSnap->pfSetArray, pReader); if (code != TSDB_CODE_SUCCESS) { + (void) tsdbReleaseReader(pReader); return code; }