From 2d6c9ec7deb40d9a4b32ab2e61ac2202afd6d010 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Sat, 23 Mar 2024 12:56:24 +0000 Subject: [PATCH] fix mem problem --- source/common/src/tmsg.c | 2 +- source/dnode/vnode/src/meta/metaEntry.c | 18 +++++++++++++++--- source/dnode/vnode/src/meta/metaQuery.c | 3 --- source/dnode/vnode/src/meta/metaTable.c | 1 - 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 2089e9901e..581ac5db99 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -7586,7 +7586,7 @@ int32_t tDecodeSColCmprWrapperEx(SDecoder *pDecoder, SColCmprWrapper *pWrapper) if (tDecodeI32v(pDecoder, &pWrapper->nCols) < 0) return -1; if (tDecodeI32v(pDecoder, &pWrapper->version) < 0) return -1; - pWrapper->pColCmpr = (SColCmpr *)taosMemoryCalloc(1, pWrapper->nCols * sizeof(SColCmpr)); + pWrapper->pColCmpr = (SColCmpr *)tDecoderMalloc(pDecoder, pWrapper->nCols * sizeof(SColCmpr)); if (pWrapper->pColCmpr == NULL) return -1; for (int i = 0; i < pWrapper->nCols; i++) { diff --git a/source/dnode/vnode/src/meta/metaEntry.c b/source/dnode/vnode/src/meta/metaEntry.c index d68e389d93..788faa2bc4 100644 --- a/source/dnode/vnode/src/meta/metaEntry.c +++ b/source/dnode/vnode/src/meta/metaEntry.c @@ -32,7 +32,7 @@ int meteDecodeColCmprEntry(SDecoder *pDecoder, SMetaEntry *pME) { if (tDecodeI32v(pDecoder, &pWrapper->nCols) < 0) return -1; if (tDecodeI32v(pDecoder, &pWrapper->version) < 0) return -1; - pWrapper->pColCmpr = (SColCmpr *)taosMemoryCalloc(1, pWrapper->nCols * sizeof(SColCmpr)); + pWrapper->pColCmpr = (SColCmpr *)tDecoderMalloc(pDecoder, pWrapper->nCols * sizeof(SColCmpr)); if (pWrapper->pColCmpr == NULL) return -1; for (int i = 0; i < pWrapper->nCols; i++) { @@ -45,6 +45,18 @@ END: taosMemoryFree(pWrapper->pColCmpr); return -1; } +static FORCE_INLINE void metatInitDefaultSColCmprWrapper(SDecoder *pDecoder, SColCmprWrapper *pCmpr, + SSchemaWrapper *pSchema) { + pCmpr->nCols = pSchema->nCols; + assert(!pCmpr->pColCmpr); + pCmpr->pColCmpr = (SColCmpr *)tDecoderMalloc(pDecoder, pCmpr->nCols * sizeof(SColCmpr)); + for (int32_t i = 0; i < pCmpr->nCols; i++) { + SColCmpr *pColCmpr = &pCmpr->pColCmpr[i]; + SSchema *pColSchema = &pSchema->pSchema[i]; + pColCmpr->id = pColSchema->colId; + pColCmpr->alg = 0; + } +} int metaEncodeEntry(SEncoder *pCoder, const SMetaEntry *pME) { if (tStartEncode(pCoder) < 0) return -1; @@ -144,9 +156,9 @@ int metaDecodeEntry(SDecoder *pCoder, SMetaEntry *pME) { TABLE_SET_COL_COMPRESSED(pME->flags); } else { if (pME->type == TSDB_SUPER_TABLE) { - tInitDefaultSColCmprWrapper(&pME->colCmpr, &pME->stbEntry.schemaRow); + metatInitDefaultSColCmprWrapper(pCoder, &pME->colCmpr, &pME->stbEntry.schemaRow); } else if (pME->type == TSDB_NORMAL_TABLE) { - tInitDefaultSColCmprWrapper(&pME->colCmpr, &pME->ntbEntry.schemaRow); + metatInitDefaultSColCmprWrapper(pCoder, &pME->colCmpr, &pME->ntbEntry.schemaRow); } } diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 84bb9ede03..26e4928f9d 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -370,7 +370,6 @@ _query: if (sver == -1 || sver == me.stbEntry.schemaRow.version) { pSchema = tCloneSSchemaWrapper(&me.stbEntry.schemaRow); tDecoderClear(&dc); - taosMemoryFree(me.colCmpr.pColCmpr); goto _exit; } } else if (me.type == TSDB_CHILD_TABLE) { @@ -381,12 +380,10 @@ _query: if (sver == -1 || sver == me.ntbEntry.schemaRow.version) { pSchema = tCloneSSchemaWrapper(&me.ntbEntry.schemaRow); tDecoderClear(&dc); - taosMemoryFree(me.colCmpr.pColCmpr); goto _exit; } } tDecoderClear(&dc); - taosMemoryFree(me.colCmpr.pColCmpr); // query from skm db if (tdbTbGet(pMeta->pSkmDb, &(SSkmDbKey){.uid = uid, .sver = sver}, sizeof(SSkmDbKey), &pData, &nData) < 0) { diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index a5bbc06b25..8f701da139 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -2562,7 +2562,6 @@ int32_t metaGetColCmpr(SMeta *pMeta, tb_uid_t uid, SHashObj **ppColCmprObj) { return 0; } tDecoderClear(&dc); - taosMemoryFree(e.colCmpr.pColCmpr); tdbFree(pData); metaULock(pMeta);