From 2421bab69935ff3b2d01cb46f11051166333df65 Mon Sep 17 00:00:00 2001 From: xiehan <52160700+Barenboim@users.noreply.github.com> Date: Wed, 6 Aug 2025 20:40:59 +0800 Subject: [PATCH] Fix WFTaskFactory::release_guard_safe() bug. (#1769) --- src/factory/WFTaskFactory.cc | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/factory/WFTaskFactory.cc b/src/factory/WFTaskFactory.cc index 702fff8a..ba729920 100644 --- a/src/factory/WFTaskFactory.cc +++ b/src/factory/WFTaskFactory.cc @@ -986,10 +986,6 @@ public: __guard_map.unref(guards_); } - SubTask *get_task() const { return this->task; } - - void set_task(SubTask *task) { this->task = task; } - protected: virtual void dispatch(); virtual void signal(void *msg) { } @@ -1100,12 +1096,11 @@ int WFTaskFactory::release_guard_safe(const std::string& name, void *msg) if (!node) return 0; - timer = WFTaskFactory::create_timer_task(0, 0, [](WFTimerTask *timer) { - series_of(timer)->push_front((SubTask *)timer->user_data); + timer = WFTaskFactory::create_timer_task(0, 0, [node](WFTimerTask *timer) { + node->guard->WFConditional::signal(timer->user_data); }); - timer->user_data = node->guard->get_task(); - node->guard->set_task(timer); - node->guard->WFConditional::signal(msg); + timer->user_data = msg; + timer->start(); return 1; }