From a5073355bbf8be73bb46d48494ad97dcab7aefa1 Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Mon, 15 Jul 2024 14:56:23 +0800 Subject: [PATCH] fix: regex hash --- source/util/src/tcompare.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/source/util/src/tcompare.c b/source/util/src/tcompare.c index c7b6d78868..94c4e27487 100644 --- a/source/util/src/tcompare.c +++ b/source/util/src/tcompare.c @@ -1228,7 +1228,7 @@ static void checkRegexCache(void* param, void* tmrId) { UsingRegex **ppUsingRegex = taosHashIterate(sRegexCache.regexHash, NULL); while ((ppUsingRegex != NULL)) { if (taosGetTimestampSec() - (*ppUsingRegex)->lastUsedTime > REGEX_CACHE_CLEAR_TIME) { - taosHashRelease(sRegexCache.regexHash, ppUsingRegex); + taosHashRemove(sRegexCache.regexHash, ppUsingRegex); } ppUsingRegex = taosHashIterate(sRegexCache.regexHash, ppUsingRegex); } @@ -1312,24 +1312,20 @@ static UsingRegex **getRegComp(const char *pPattern) { while (true) { int code = taosHashPut(sRegexCache.regexHash, pPattern, strlen(pPattern), &pUsingRegex, sizeof(UsingRegex *)); - if (code != 0) { - if (terrno == TSDB_CODE_DUP_KEY) { - terrno = TSDB_CODE_SUCCESS; - ppUsingRegex = (UsingRegex **)taosHashAcquire(sRegexCache.regexHash, pPattern, strlen(pPattern)); - if (ppUsingRegex) { - if (*ppUsingRegex != pUsingRegex) { - regexCacheFree(&pUsingRegex); - } - pUsingRegex = (*ppUsingRegex); - break; - } else { - continue; - } - } else { + if (code != 0 && code != TSDB_CODE_DUP_KEY) { + regexCacheFree(&pUsingRegex); + uError("Failed to put regex pattern %s into cache, exception internal error.", pPattern); + return NULL; + } + ppUsingRegex = (UsingRegex **)taosHashAcquire(sRegexCache.regexHash, pPattern, strlen(pPattern)); + if (ppUsingRegex) { + if (*ppUsingRegex != pUsingRegex) { regexCacheFree(&pUsingRegex); - uError("Failed to put regex pattern %s into cache, exception internal error.", pPattern); - return NULL; } + pUsingRegex = (*ppUsingRegex); + break; + } else { + continue; } } pUsingRegex->lastUsedTime = taosGetTimestampSec();