diff --git a/source/armarx/navigation/client/Navigator.cpp b/source/armarx/navigation/client/Navigator.cpp index 15fb4bc172b76ffea7cd1460864894786f3cb20b..73ab51bcc842b86a07374cb7815b921d578428e4 100644 --- a/source/armarx/navigation/client/Navigator.cpp +++ b/source/armarx/navigation/client/Navigator.cpp @@ -45,6 +45,12 @@ namespace armarx::navigation::client { ARMARX_TRACE; ARMARX_CHECK_NOT_NULL(srv.navigator) << "Navigator service must not be null!"; + { + // TODO: This still leads to a race condition, if extern a stop event is generated before moveTo but arrives + // after the event is reset + std::scoped_lock const l{stoppedInfo.m}; + stoppedInfo.event.reset(); + } srv.navigator->moveTo(waypoints, frame); } @@ -58,6 +64,12 @@ namespace armarx::navigation::client const std::vector<WaypointTarget>& path = builder.path(); validate(path); + { + // TODO: This still leads to a race condition, if extern a stop event is generated before moveTo but arrives + // after the event is reset + std::scoped_lock const l{stoppedInfo.m}; + stoppedInfo.event.reset(); + } srv.navigator->moveTo(path, frame); } @@ -67,6 +79,13 @@ namespace armarx::navigation::client { ARMARX_TRACE; ARMARX_CHECK_NOT_NULL(srv.navigator) << "Navigator service must not be null!"; + + { + // TODO: This still leads to a race condition, if extern a stop event is generated before moveTo but arrives + // after the event is reset + std::scoped_lock const l{stoppedInfo.m}; + stoppedInfo.event.reset(); + } srv.navigator->moveTowards(direction, frame); }