From 21bb455bb1513c2a4fe99c9098244f3fdc9c887b Mon Sep 17 00:00:00 2001 From: zhuruigan Date: Sat, 9 Aug 2025 10:15:21 +0800 Subject: [PATCH] fix sequenceRunner currentTaskId_ Signed-off-by: zhuruigan Change-Id: I062a70751c88b26d6e1f2504f21315b1f08cd72e --- .../taskpool/sequence_runner.cpp | 16 ++++++++++++++++ js_concurrent_module/taskpool/sequence_runner.h | 3 +++ .../taskpool/sequence_runner_manager.cpp | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/js_concurrent_module/taskpool/sequence_runner.cpp b/js_concurrent_module/taskpool/sequence_runner.cpp index f54c44c3..25dc418b 100644 --- a/js_concurrent_module/taskpool/sequence_runner.cpp +++ b/js_concurrent_module/taskpool/sequence_runner.cpp @@ -174,11 +174,17 @@ bool SequenceRunner::RemoveWaitingTask(Task* task) { std::unique_lock lock(seqRunnerMutex_); if (seqRunnerTasks_.empty()) { + if (runnerCount_ >= refCount_) { + currentTaskId_ = 0; + } return false; } auto iter = std::find(seqRunnerTasks_.begin(), seqRunnerTasks_.end(), task); if (iter != seqRunnerTasks_.end()) { seqRunnerTasks_.erase(iter); + if (seqRunnerTasks_.empty() && runnerCount_ >= refCount_) { + currentTaskId_ = 0; + } return true; } return false; @@ -240,4 +246,14 @@ void SequenceRunner::TriggerTask(napi_env env) TaskManager::GetInstance().EnqueueTaskId(task->taskId_, priority_); } } + +void SequenceRunner::DecreaseRunnerCount() +{ + runnerCount_--; +} + +void SequenceRunner::IncreaseRunnerCount() +{ + runnerCount_++; +} } // namespace Commonlibrary::Concurrent::TaskPoolModule \ No newline at end of file diff --git a/js_concurrent_module/taskpool/sequence_runner.h b/js_concurrent_module/taskpool/sequence_runner.h index 9f5e7ddb..8464e679 100644 --- a/js_concurrent_module/taskpool/sequence_runner.h +++ b/js_concurrent_module/taskpool/sequence_runner.h @@ -35,6 +35,8 @@ public: void IncreaseSeqCount(); uint64_t DecreaseSeqCount(); void TriggerTask(napi_env env); + void IncreaseRunnerCount(); + void DecreaseRunnerCount(); private: SequenceRunner(const SequenceRunner &) = delete; @@ -58,6 +60,7 @@ public: std::string seqName_ {}; bool isGlobalRunner_ {false}; std::atomic refCount_ {1}; + std::atomic runnerCount_ {1}; }; } // namespace Commonlibrary::Concurrent::TaskPoolModule #endif // JS_CONCURRENT_MODULE_TASKPOOL_RUNNER_H \ No newline at end of file diff --git a/js_concurrent_module/taskpool/sequence_runner_manager.cpp b/js_concurrent_module/taskpool/sequence_runner_manager.cpp index f970fc70..84367129 100644 --- a/js_concurrent_module/taskpool/sequence_runner_manager.cpp +++ b/js_concurrent_module/taskpool/sequence_runner_manager.cpp @@ -52,6 +52,7 @@ SequenceRunner* SequenceRunnerManager::CreateOrGetGlobalRunner(napi_env env, nap return nullptr; } seqRunner->IncreaseSeqCount(); + seqRunner->IncreaseRunnerCount(); return seqRunner; } @@ -70,6 +71,10 @@ void SequenceRunnerManager::SequenceRunnerDestructor(SequenceRunner* seqRunner) if (runner == nullptr) { return; } + { + std::unique_lock lock(seqRunnersMutex_); + seqRunner->DecreaseRunnerCount(); + } UnrefAndDestroyRunner(seqRunner); } -- Gitee