1. fix exchange operator dead lock due to no ret check for add ref

2. fix null pointer of FetchRpcHandle of exchangeoperator
This commit is contained in:
wangjiaming0909 2024-08-08 18:06:37 +08:00
parent d6b3b3b49f
commit efd1ece152
1 changed files with 13 additions and 7 deletions

View File

@ -391,7 +391,11 @@ static int32_t initExchangeOperator(SExchangePhysiNode* pExNode, SExchangeInfo*
initLimitInfo(pExNode->node.pLimit, pExNode->node.pSlimit, &pInfo->limitInfo); initLimitInfo(pExNode->node.pLimit, pExNode->node.pSlimit, &pInfo->limitInfo);
pInfo->self = taosAddRef(exchangeObjRefPool, pInfo); 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); return initDataSource(numOfSources, pInfo, id);
} }
@ -480,14 +484,16 @@ void freeSourceDataInfo(void* p) {
void doDestroyExchangeOperatorInfo(void* param) { void doDestroyExchangeOperatorInfo(void* param) {
SExchangeInfo* pExInfo = (SExchangeInfo*)param; SExchangeInfo* pExInfo = (SExchangeInfo*)param;
for (int32_t i = 0; i < pExInfo->pFetchRpcHandles->size; ++i) { if (pExInfo->pFetchRpcHandles) {
int64_t* pRpcHandle = taosArrayGet(pExInfo->pFetchRpcHandles, i); for (int32_t i = 0; i < pExInfo->pFetchRpcHandles->size; ++i) {
if (*pRpcHandle > 0) { int64_t* pRpcHandle = taosArrayGet(pExInfo->pFetchRpcHandles, i);
SDownstreamSourceNode* pSource = taosArrayGet(pExInfo->pSources, i); if (*pRpcHandle > 0) {
(void)asyncFreeConnById(pExInfo->pTransporter, *pRpcHandle); SDownstreamSourceNode* pSource = taosArrayGet(pExInfo->pSources, i);
(void)asyncFreeConnById(pExInfo->pTransporter, *pRpcHandle);
}
} }
taosArrayDestroy(pExInfo->pFetchRpcHandles);
} }
taosArrayDestroy(pExInfo->pFetchRpcHandles);
taosArrayDestroy(pExInfo->pSources); taosArrayDestroy(pExInfo->pSources);
taosArrayDestroyEx(pExInfo->pSourceDataInfo, freeSourceDataInfo); taosArrayDestroyEx(pExInfo->pSourceDataInfo, freeSourceDataInfo);