Skip to content

Commit

Permalink
Fix checking of the guard condition.
Browse files Browse the repository at this point in the history
Previously, when we were checking if a guard condition
was triggered, we would actually check and reset it.
But that means that when we later on went to set the
appropriate things in the wait_set, we wouldn't actually
set the guard_condition true, since it was false by that point.

Instead, add in two separate methods; the one that just
returns whether it is triggered, which we call when checking,
and the one that checks and resets, which we call when
setting it in the wait_set.

Signed-off-by: Chris Lalancette <[email protected]>
  • Loading branch information
clalancette committed Jun 20, 2024
1 parent d3396a5 commit fb24401
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
9 changes: 7 additions & 2 deletions rmw_zenoh_cpp/src/detail/guard_condition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,21 @@ void GuardCondition::detach_condition()
condition_variable_ = nullptr;
}

bool GuardCondition::has_triggered() const
{
std::lock_guard<std::mutex> lock(internal_mutex_);
return has_triggered_;
}

///=============================================================================
bool GuardCondition::get_and_reset_trigger()
{
std::lock_guard<std::mutex> 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
2 changes: 2 additions & 0 deletions rmw_zenoh_cpp/src/detail/guard_condition.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ class GuardCondition final

void detach_condition();

bool has_triggered() const;

bool get_and_reset_trigger();

private:
Expand Down
4 changes: 1 addition & 3 deletions rmw_zenoh_cpp/src/rmw_zenoh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3143,14 +3143,12 @@ static bool has_triggered_condition(
rmw_clients_t * clients,
rmw_events_t * events)
{
static_cast<void>(events);

if (guard_conditions) {
for (size_t i = 0; i < guard_conditions->guard_condition_count; ++i) {
rmw_zenoh_cpp::GuardCondition * gc =
static_cast<rmw_zenoh_cpp::GuardCondition *>(guard_conditions->guard_conditions[i]);
if (gc != nullptr) {
if (gc->get_and_reset_trigger()) {
if (gc->has_triggered()) {
return true;
}
}
Expand Down

0 comments on commit fb24401

Please sign in to comment.