diff --git a/include/common/tmsg.h b/include/common/tmsg.h index a52b9d61df..d32414680b 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -3230,8 +3230,8 @@ typedef struct { int32_t tEncodeSSubmitReq2(SEncoder* pCoder, const SSubmitReq2* pReq); int32_t tDecodeSSubmitReq2(SDecoder* pCoder, SSubmitReq2* pReq); -void tDestroySSubmitTbData(SSubmitTbData* pTbData); -void tDestroySSubmitReq2(SSubmitReq2* pReq); +void tDestroySSubmitTbData(SSubmitTbData* pTbData, int32_t flag); +void tDestroySSubmitReq2(SSubmitReq2* pReq, int32_t flag); typedef struct { int32_t code; diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 391fb86748..22f872c005 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -6809,30 +6809,46 @@ _exit: return code; } -void tDestroySSubmitTbData(SSubmitTbData *pTbData) { +void tDestroySSubmitTbData(SSubmitTbData *pTbData, int32_t flag) { if (pTbData->pCreateTbReq) { - // todo taosMemoryFree(pTbData->pCreateTbReq); } - if (pTbData->flags & SUBMIT_REQ_COLUMN_DATA_FORMAT) { - ASSERT(0); // TODO - } else { - if (pTbData->aRowP) { + if (flag == TSDB_MSG_FLG_ENCODE) { + if (pTbData->flags & SUBMIT_REQ_COLUMN_DATA_FORMAT) { int32_t nRow = TARRAY_SIZE(pTbData->aRowP); SRow **rows = (SRow **)TARRAY_DATA(pTbData->aRowP); + for (int32_t i = 0; i < nRow; ++i) { tRowDestroy(rows[i]); } taosArrayDestroy(pTbData->aRowP); + } else { + int32_t nColData = TARRAY_SIZE(pTbData->aCol); + SColData *aColData = (SColData *)TARRAY_DATA(pTbData->aCol); + + for (int32_t i = 0; i < nColData; ++i) { + tColDataDestroy(&aColData[i]); + } + taosArrayDestroy(pTbData->aCol); + } + } else if (flag == TSDB_MSG_FLG_DECODE) { + if (pTbData->flags & SUBMIT_REQ_COLUMN_DATA_FORMAT) { + taosArrayDestroy(pTbData->aCol); + } else { + taosArrayDestroy(pTbData->aRowP); } } } -void tDestroySSubmitReq2(SSubmitReq2 *pReq) { - if (NULL == pReq) return; +void tDestroySSubmitReq2(SSubmitReq2 *pReq, int32_t flag) { + int32_t nSubmitTbData = TARRAY_SIZE(pReq->aSubmitTbData); + SSubmitTbData *aSubmitTbData = (SSubmitTbData *)TARRAY_DATA(pReq->aSubmitTbData); - taosArrayDestroyEx(pReq->aSubmitTbData, (FDelete)tDestroySSubmitTbData); + for (int32_t i = 0; i < nSubmitTbData; i++) { + tDestroySSubmitTbData(&aSubmitTbData[i], flag); + } + taosArrayDestroy(pReq->aSubmitTbData); } int32_t tEncodeSSubmitRsp2(SEncoder *pCoder, const SSubmitRsp2 *pRsp) { diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index 91a9341f1f..4399d5993a 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -978,7 +978,7 @@ _exit: // clear taosArrayDestroy(newTbUids); - tDestroySSubmitReq2(pSubmitReq); + tDestroySSubmitReq2(pSubmitReq, TSDB_MSG_FLG_DECODE); tDestroySSubmitRsp2(pSubmitRsp, TSDB_MSG_FLG_ENCODE); return code; diff --git a/source/libs/parser/src/parInsertUtil.c b/source/libs/parser/src/parInsertUtil.c index 8a934cc11e..22551a6033 100644 --- a/source/libs/parser/src/parInsertUtil.c +++ b/source/libs/parser/src/parInsertUtil.c @@ -1092,7 +1092,7 @@ void insDestroyTableDataCxt(STableDataCxt* pTableCxt) { destroyBoundColInfo(&pTableCxt->boundColsInfo); taosArrayDestroyEx(pTableCxt->pValues, destroyColVal); if (pTableCxt->pData) { - tDestroySSubmitTbData(pTableCxt->pData); + tDestroySSubmitTbData(pTableCxt->pData, TSDB_MSG_FLG_ENCODE); taosMemoryFree(pTableCxt->pData); } taosMemoryFree(pTableCxt); @@ -1103,7 +1103,7 @@ void insDestroyVgroupDataCxt(SVgroupDataCxt* pVgCxt) { return; } - tDestroySSubmitReq2(pVgCxt->pData); + tDestroySSubmitReq2(pVgCxt->pData, TSDB_MSG_FLG_ENCODE); taosMemoryFree(pVgCxt); }