From d9e6a2e80fc2fce26f9259673e0c910ecdd622a4 Mon Sep 17 00:00:00 2001 From: zhowenxuan Date: Thu, 31 Jul 2025 15:04:19 +0800 Subject: [PATCH] =?UTF-8?q?worker=E5=91=8A=E8=AD=A6=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: [新需求]: worker告警处理 https://gitee.com/openharmony/commonlibrary_ets_utils/issues/ICLI1S Signed-off-by: zhowenxuan Change-Id: I9dfcc9f891324da15794a55eb541ccb9bfd26d02 --- js_concurrent_module/worker/worker.h | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/js_concurrent_module/worker/worker.h b/js_concurrent_module/worker/worker.h index 4005bf77..87486b17 100644 --- a/js_concurrent_module/worker/worker.h +++ b/js_concurrent_module/worker/worker.h @@ -453,8 +453,12 @@ public: { workerEnv_ = workerEnv; std::unique_lock lock(workerEnvCallbackQueueMutex_); - for (; !workerEnvCallbackQueue_.empty(); workerEnvCallbackQueue_.pop()) { - workerEnvCallbackQueue_.front()(workerEnv_); + while (!workerEnvCallbackQueue_.empty()) { + auto callback = workerEnvCallbackQueue_.front(); + workerEnvCallbackQueue_.pop(); + lock.unlock(); + callback(workerEnv_); + lock.lock(); } } @@ -497,13 +501,21 @@ public: } } - void RegisterCallbackForWorkerEnv(std::function callback) + void RegisterCallbackForWorkerEnv(std::function callback) { - std::unique_lock lock(workerEnvCallbackQueueMutex_); - workerEnvCallbackQueue_.push(callback); + { + std::unique_lock lock(workerEnvCallbackQueueMutex_); + workerEnvCallbackQueue_.push(callback); + } + if (workerEnv_ != nullptr) { - for (; !workerEnvCallbackQueue_.empty(); workerEnvCallbackQueue_.pop()) { - workerEnvCallbackQueue_.front()(workerEnv_); + std::unique_lock lock(workerEnvCallbackQueueMutex_); + while (!workerEnvCallbackQueue_.empty()) { + auto callback = workerEnvCallbackQueue_.front(); + workerEnvCallbackQueue_.pop(); + lock.unlock(); + callback(workerEnv_); + lock.lock(); } } } -- Gitee