From c6795b68d2a98eec103a4e3d3f9d4e97648571be Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 26 Nov 2022 00:12:27 +0800 Subject: [PATCH] fix(query): check list size before iterate it. --- source/dnode/vnode/src/meta/metaCache.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaCache.c b/source/dnode/vnode/src/meta/metaCache.c index 05b6209c56..4aa6ed3744 100644 --- a/source/dnode/vnode/src/meta/metaCache.c +++ b/source/dnode/vnode/src/meta/metaCache.c @@ -519,20 +519,20 @@ int32_t metaUidFilterCachePut(SMeta* pMeta, uint64_t suid, const void* pKey, int // remove the lru cache that are expired due to the tags value update, or creating, or dropping, of child tables int32_t metaUidCacheClear(SMeta* pMeta, uint64_t suid) { STagFilterResEntry* pEntry = taosHashGet(pMeta->pCache->sTagFilterResCache.pTableEntry, &suid, sizeof(uint64_t)); - if (pEntry == NULL) { + if (pEntry == NULL || listNEles(&pEntry->list) == 0) { return TSDB_CODE_SUCCESS; } - int32_t keyLen = sizeof(uint64_t) + 128; - char* p = taosMemoryMalloc(keyLen); - *(uint64_t*)p = pEntry->suid; + int32_t keyLen = sizeof(uint64_t) * 3; + uint64_t p[3] = {0}; + p[0] = suid; SListIter iter = {0}; tdListInitIter(&pEntry->list, &iter, TD_LIST_FORWARD); SListNode* pNode = NULL; while ((pNode = tdListNext(&iter)) != NULL) { - memcpy(p + sizeof(suid), pNode->data, 128); + memcpy(&p[1], pNode->data, 16); taosLRUCacheErase(pMeta->pCache->sTagFilterResCache.pUidResCache, p, keyLen); } -- GitLab