From 529dc19a559bec9668f6916d59e030a793d47360 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 29 Apr 2022 11:43:14 +0800 Subject: [PATCH] fix ref issue --- source/libs/scheduler/inc/schedulerInt.h | 1 + source/libs/scheduler/src/scheduler.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/source/libs/scheduler/inc/schedulerInt.h b/source/libs/scheduler/inc/schedulerInt.h index f4d6872969..5906ee8970 100644 --- a/source/libs/scheduler/inc/schedulerInt.h +++ b/source/libs/scheduler/inc/schedulerInt.h @@ -86,6 +86,7 @@ typedef struct SSchedulerMgmt { uint64_t sId; // schedulerId SSchedulerCfg cfg; SRWLatch lock; + bool exit; int32_t jobRef; int32_t jobNum; SSchedulerStat stat; diff --git a/source/libs/scheduler/src/scheduler.c b/source/libs/scheduler/src/scheduler.c index aa4e598d7d..af276ba9cd 100644 --- a/source/libs/scheduler/src/scheduler.c +++ b/source/libs/scheduler/src/scheduler.c @@ -2249,6 +2249,10 @@ int32_t schCancelJob(SSchJob *pJob) { } void schCloseJobRef(void) { + if (!atomic_load_8((int8_t*)&schMgmt.exit)) { + return; + } + SCH_LOCK(SCH_WRITE, &schMgmt.lock); if (atomic_load_32(&schMgmt.jobNum) <= 0 && schMgmt.jobRef >= 0) { taosCloseRef(schMgmt.jobRef); @@ -2390,7 +2394,7 @@ _return: } int32_t schedulerInit(SSchedulerCfg *cfg) { - if (schMgmt.jobRef) { + if (schMgmt.jobRef >= 0) { qError("scheduler already initialized"); return TSDB_CODE_QRY_INVALID_INPUT; } @@ -2754,6 +2758,8 @@ void schedulerFreeTaskList(SArray *taskList) { } void schedulerDestroy(void) { + atomic_store_8((int8_t*)&schMgmt.exit, 1); + if (schMgmt.jobRef >= 0) { SSchJob *pJob = taosIterateRef(schMgmt.jobRef, 0); int64_t refId = 0;