From efd1ece152b250cbe274ce0f43f3ff7e4bcf72fa Mon Sep 17 00:00:00 2001 From: wangjiaming0909 <604227650@qq.com> Date: Thu, 8 Aug 2024 18:06:37 +0800 Subject: [PATCH] 1. fix exchange operator dead lock due to no ret check for add ref 2. fix null pointer of FetchRpcHandle of exchangeoperator --- source/libs/executor/src/exchangeoperator.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c index e4ebb74252..78c0d939ad 100644 --- a/source/libs/executor/src/exchangeoperator.c +++ b/source/libs/executor/src/exchangeoperator.c @@ -391,7 +391,11 @@ static int32_t initExchangeOperator(SExchangePhysiNode* pExNode, SExchangeInfo* initLimitInfo(pExNode->node.pLimit, pExNode->node.pSlimit, &pInfo->limitInfo); pInfo->self = taosAddRef(exchangeObjRefPool, pInfo); - + if (pInfo->self < 0) { + int32_t code = terrno; + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + return code; + } return initDataSource(numOfSources, pInfo, id); } @@ -480,14 +484,16 @@ void freeSourceDataInfo(void* p) { void doDestroyExchangeOperatorInfo(void* param) { SExchangeInfo* pExInfo = (SExchangeInfo*)param; - for (int32_t i = 0; i < pExInfo->pFetchRpcHandles->size; ++i) { - int64_t* pRpcHandle = taosArrayGet(pExInfo->pFetchRpcHandles, i); - if (*pRpcHandle > 0) { - SDownstreamSourceNode* pSource = taosArrayGet(pExInfo->pSources, i); - (void)asyncFreeConnById(pExInfo->pTransporter, *pRpcHandle); + if (pExInfo->pFetchRpcHandles) { + for (int32_t i = 0; i < pExInfo->pFetchRpcHandles->size; ++i) { + int64_t* pRpcHandle = taosArrayGet(pExInfo->pFetchRpcHandles, i); + if (*pRpcHandle > 0) { + SDownstreamSourceNode* pSource = taosArrayGet(pExInfo->pSources, i); + (void)asyncFreeConnById(pExInfo->pTransporter, *pRpcHandle); + } } + taosArrayDestroy(pExInfo->pFetchRpcHandles); } - taosArrayDestroy(pExInfo->pFetchRpcHandles); taosArrayDestroy(pExInfo->pSources); taosArrayDestroyEx(pExInfo->pSourceDataInfo, freeSourceDataInfo);