rcl: rcl_wait() returns early when a timer awakes
Bug report
Required Info:
- Operating System:
- Windows 10
- Installation type:
- From source
- Version or commit hash:
- DDS implementation:
- RTI Connext
Steps to reproduce issue
Run timer tests using rmw_connext_cpp.
Expected behavior
Tests pass.
Actual behavior
Often, tests fail when rcl_wait() returns early when a timer awakes.
Additional information
For one, even though a clock is specified for timers, how rmw_wait() abides to the given timeout is not specified. This issue persists for both steady time and system time timers.
This issue does not occur when using rmw_fastrtps*_cpp or rmw_cyclonedds_cpp, as these return at the right time or (most often) past it.
Suspecting a bug in rmw_connext_cpp, I could confirm that the expected timeout is passed to RTI Connext’s WaitSet::wait() API which nonetheless returns early for both steady time and system time clocks. However, I believe this is less of a bug in RTI Connext than a misuse of rmw_wait() for rcl timers’ implementation, considering time resolution. The closest achievable timeout on a given OS is not necessarily greater than or equal than any one specified.
About this issue
- Original URL
- State: open
- Created 4 years ago
- Comments: 22 (22 by maintainers)
With https://github.com/ros2/rmw/pull/275,
rmw_wait()API documentation now mentions this little timing detail. I still have to benchmark modified timers in #707 though.