From fd4efdf06fb3a8b94cb61cec319db9a79ab7ac6d Mon Sep 17 00:00:00 2001 From: xiehan <52160700+Barenboim@users.noreply.github.com> Date: Tue, 19 Dec 2023 19:30:43 +0800 Subject: [PATCH] Add return value for WFTaskFactory::release_guard(). (#1455) --- src/factory/WFTaskFactory.cc | 30 +++++++++++++++++------------- src/factory/WFTaskFactory.h | 11 ++++++----- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/factory/WFTaskFactory.cc b/src/factory/WFTaskFactory.cc index d6d561ca..7e63506e 100644 --- a/src/factory/WFTaskFactory.cc +++ b/src/factory/WFTaskFactory.cc @@ -1039,28 +1039,32 @@ WFConditional *WFTaskFactory::create_guard(const std::string& name, return __guard_map.create(name, task, msgbuf); } -void WFTaskFactory::release_guard(const std::string& name, void *msg) +int WFTaskFactory::release_guard(const std::string& name, void *msg) { struct __guard_node *node = __guard_map.release(name); - if (node) - node->guard->WFConditional::signal(msg); + if (!node) + return 0; + + node->guard->WFConditional::signal(msg); + return 1; } -void WFTaskFactory::release_guard_safe(const std::string& name, void *msg) +int WFTaskFactory::release_guard_safe(const std::string& name, void *msg) { struct __guard_node *node = __guard_map.release(name); WFTimerTask *timer; - if (node) - { - timer = WFTaskFactory::create_timer_task(0, 0, [](WFTimerTask *timer) { - series_of(timer)->push_front((SubTask *)timer->user_data); - }); - timer->user_data = node->guard->get_task(); - node->guard->set_task(timer); - node->guard->WFConditional::signal(msg); - } + if (!node) + return 0; + + timer = WFTaskFactory::create_timer_task(0, 0, [](WFTimerTask *timer) { + series_of(timer)->push_front((SubTask *)timer->user_data); + }); + timer->user_data = node->guard->get_task(); + node->guard->set_task(timer); + node->guard->WFConditional::signal(msg); + return 1; } /**************** Timed Go Task *****************/ diff --git a/src/factory/WFTaskFactory.h b/src/factory/WFTaskFactory.h index 97a3ae7c..75f37a94 100644 --- a/src/factory/WFTaskFactory.h +++ b/src/factory/WFTaskFactory.h @@ -329,20 +329,21 @@ public: SubTask *task, void **msgbuf); /* The 'guard' is acquired after started, so call 'release_guard' after - and only after the task is finished, typically in its callback. */ - static void release_guard(const std::string& resource_name) + and only after the task is finished, typically in its callback. + The function returns 1 if another is signaled, otherwise returns 0. */ + static int release_guard(const std::string& resource_name) { return WFTaskFactory::release_guard(resource_name, NULL); } - static void release_guard(const std::string& resaource_name, void *msg); + static int release_guard(const std::string& resaource_name, void *msg); - static void release_guard_safe(const std::string& resource_name) + static int release_guard_safe(const std::string& resource_name) { return WFTaskFactory::release_guard_safe(resource_name, NULL); } - static void release_guard_safe(const std::string& resource_name, void *msg); + static int release_guard_safe(const std::string& resource_name, void *msg); public: template