From fa428fc6fb8f1ca8d480c313e794e847609d0cff Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Wed, 3 Aug 2022 10:56:18 +0800 Subject: [PATCH 1/2] fix: remove cleanup udf to remove the real problem --- source/libs/executor/src/executor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index b2d4a5fc68..0dda403f9b 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -442,7 +442,7 @@ int32_t qExecTask(qTaskInfo_t tinfo, SSDataBlock** pRes, uint64_t* useconds) { *useconds = pTaskInfo->cost.elapsedTime; } - cleanUpUdfs(); + //cleanUpUdfs(); int32_t current = (*pRes != NULL) ? (*pRes)->info.rows : 0; uint64_t total = pTaskInfo->pRoot->resultInfo.totalRows; From f71cb30dd0629609a72e4049fbdde0665ab53f09 Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Wed, 3 Aug 2022 11:20:48 +0800 Subject: [PATCH 2/2] fix: clean up udfs is not executed when no udfs --- source/libs/executor/src/executor.c | 2 +- source/libs/function/src/tudf.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index 0dda403f9b..b2d4a5fc68 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -442,7 +442,7 @@ int32_t qExecTask(qTaskInfo_t tinfo, SSDataBlock** pRes, uint64_t* useconds) { *useconds = pTaskInfo->cost.elapsedTime; } - //cleanUpUdfs(); + cleanUpUdfs(); int32_t current = (*pRes != NULL) ? (*pRes)->info.rows : 0; uint64_t total = pTaskInfo->pRoot->resultInfo.totalRows; diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c index afacb50d35..d5a3e91eea 100644 --- a/source/libs/function/src/tudf.c +++ b/source/libs/function/src/tudf.c @@ -976,8 +976,12 @@ int32_t cleanUpUdfs() { } uv_mutex_lock(&gUdfdProxy.udfStubsMutex); - int32_t i = 0; + if (gUdfdProxy.udfStubs == NULL || taosArrayGetSize(gUdfdProxy.udfStubs) == 0) { + uv_mutex_unlock(&gUdfdProxy.udfStubsMutex); + return TSDB_CODE_SUCCESS; + } SArray* udfStubs = taosArrayInit(16, sizeof(SUdfcFuncStub)); + int32_t i = 0; while (i < taosArrayGetSize(gUdfdProxy.udfStubs)) { SUdfcFuncStub *stub = taosArrayGet(gUdfdProxy.udfStubs, i); if (stub->refCount == 0) {