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)

Most upvoted comments

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.