diff --git a/rmw_zenoh_cpp/src/detail/guard_condition.cpp b/rmw_zenoh_cpp/src/detail/guard_condition.cpp index feb6ea48..76f1c1f8 100644 --- a/rmw_zenoh_cpp/src/detail/guard_condition.cpp +++ b/rmw_zenoh_cpp/src/detail/guard_condition.cpp @@ -53,16 +53,21 @@ void GuardCondition::detach_condition() condition_variable_ = nullptr; } +bool GuardCondition::has_triggered() const +{ + std::lock_guard lock(internal_mutex_); + return has_triggered_; +} + ///============================================================================= bool GuardCondition::get_and_reset_trigger() { std::lock_guard lock(internal_mutex_); bool ret = has_triggered_; - // There is no data associated with the guard condition, so as soon as the callers asks about the - // state, we can immediately reset and get ready for the next trigger. has_triggered_ = false; return ret; } + } // namespace rmw_zenoh_cpp diff --git a/rmw_zenoh_cpp/src/detail/guard_condition.hpp b/rmw_zenoh_cpp/src/detail/guard_condition.hpp index 07e1e6b0..9adb737e 100644 --- a/rmw_zenoh_cpp/src/detail/guard_condition.hpp +++ b/rmw_zenoh_cpp/src/detail/guard_condition.hpp @@ -35,6 +35,8 @@ class GuardCondition final void detach_condition(); + bool has_triggered() const; + bool get_and_reset_trigger(); private: diff --git a/rmw_zenoh_cpp/src/rmw_zenoh.cpp b/rmw_zenoh_cpp/src/rmw_zenoh.cpp index 87aebac8..c3deb4f8 100644 --- a/rmw_zenoh_cpp/src/rmw_zenoh.cpp +++ b/rmw_zenoh_cpp/src/rmw_zenoh.cpp @@ -3137,20 +3137,18 @@ rmw_destroy_wait_set(rmw_wait_set_t * wait_set) } static bool has_triggered_condition( - rmw_subscriptions_t * subscriptions, - rmw_guard_conditions_t * guard_conditions, - rmw_services_t * services, - rmw_clients_t * clients, - rmw_events_t * events) + const rmw_subscriptions_t * const subscriptions, + const rmw_guard_conditions_t * const guard_conditions, + const rmw_services_t * const services, + const rmw_clients_t * const clients, + const rmw_events_t * const events) { - static_cast(events); - if (guard_conditions) { for (size_t i = 0; i < guard_conditions->guard_condition_count; ++i) { rmw_zenoh_cpp::GuardCondition * gc = static_cast(guard_conditions->guard_conditions[i]); if (gc != nullptr) { - if (gc->get_and_reset_trigger()) { + if (gc->has_triggered()) { return true; } }