diff --git a/source/dnode/mnode/impl/inc/mndShow.h b/source/dnode/mnode/impl/inc/mndShow.h index 5a3e487e3d..de7068e9ad 100644 --- a/source/dnode/mnode/impl/inc/mndShow.h +++ b/source/dnode/mnode/impl/inc/mndShow.h @@ -23,6 +23,14 @@ extern "C" { #endif +#define COL_DATA_SET_VAL_RET(pData, isNull, pObj) \ + do { \ + if ((code = colDataSetVal(pColInfo, numOfRows, (pData), (isNull))) != 0) { \ + if (pObj) sdbRelease(pSdb, (pObj)); \ + return code; \ + } \ + } while (0) + int32_t mndInitShow(SMnode *pMnode); void mndCleanupShow(SMnode *pMnode); void mndAddShowRetrieveHandle(SMnode *pMnode, EShowType showType, ShowRetrieveFp fp); diff --git a/source/dnode/mnode/impl/src/mndCluster.c b/source/dnode/mnode/impl/src/mndCluster.c index a811a1ada0..31ebc6609d 100644 --- a/source/dnode/mnode/impl/src/mndCluster.c +++ b/source/dnode/mnode/impl/src/mndCluster.c @@ -280,6 +280,7 @@ static int32_t mndCreateDefaultCluster(SMnode *pMnode) { static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { SMnode *pMnode = pMsg->info.node; SSdb *pSdb = pMnode->pSdb; + int32_t code = 0; int32_t numOfRows = 0; int32_t cols = 0; SClusterObj *pCluster = NULL; @@ -290,31 +291,31 @@ static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock * cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCluster->id, false); + COL_DATA_SET_VAL_RET((const char *)&pCluster->id, false, pCluster); char buf[tListLen(pCluster->name) + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(buf, pCluster->name, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, buf, false); + COL_DATA_SET_VAL_RET(buf, false, pCluster); int32_t upTime = mndGetClusterUpTimeImp(pCluster); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&upTime, false); + COL_DATA_SET_VAL_RET((const char *)&upTime, false, pCluster); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCluster->createdTime, false); + COL_DATA_SET_VAL_RET((const char *)&pCluster->createdTime, false, pCluster); char ver[12] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(ver, tsVersionName, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)ver, false); + COL_DATA_SET_VAL_RET((const char *)ver, false, pCluster); char expireTime[25] = {0}; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); if (GRANT_EXPIRE_UNLIMITED(tsExpireTime / 1000)) { STR_WITH_MAXSIZE_TO_VARSTR(expireTime, "unlimited", pShow->pMeta->pSchemas[cols].bytes); - colDataSetVal(pColInfo, numOfRows, expireTime, false); + COL_DATA_SET_VAL_RET(expireTime, false, pCluster); } else if (tsExpireTime <= 0) { colDataSetNULL(pColInfo, numOfRows); } else { @@ -327,7 +328,7 @@ static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock * ts[0] = 0; } STR_WITH_MAXSIZE_TO_VARSTR(expireTime, ts, pShow->pMeta->pSchemas[cols].bytes); - colDataSetVal(pColInfo, numOfRows, expireTime, false); + COL_DATA_SET_VAL_RET(expireTime, false, pCluster); } sdbRelease(pSdb, pCluster);