diff --git a/source/libs/scheduler/inc/schedulerInt.h b/source/libs/scheduler/inc/schedulerInt.h index f4d687296989ab50874df4fe7e5c40668a762033..5906ee8970f7725fb10139522eab3d276ef3f7f0 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 aa4e598d7d27cc4a9ece09aca6c2c03cbee77f28..af276ba9cdcbae3b2dcb995a518162cc9ad0d0d0 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;