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..7ea0dea2 100644 --- a/rmw_zenoh_cpp/src/rmw_zenoh.cpp +++ b/rmw_zenoh_cpp/src/rmw_zenoh.cpp @@ -3143,14 +3143,12 @@ static bool has_triggered_condition( rmw_clients_t * clients, rmw_events_t * 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; } }