From 4966aa5650322176c7dc4200de74dbd8bcdd9b6e Mon Sep 17 00:00:00 2001 From: Bartok9 Date: Mon, 27 Jul 2026 01:51:47 -0400 Subject: [PATCH] fix(ros2): reject non-positive waiters time_interval Prevent busy-spin when time_interval is 0 and reject negative poll gaps. --- src/rai_core/rai/communication/ros2/waiters.py | 2 ++ tests/communication/ros2/test_waiters.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/rai_core/rai/communication/ros2/waiters.py b/src/rai_core/rai/communication/ros2/waiters.py index 256f2558f..b449ebd0b 100644 --- a/src/rai_core/rai/communication/ros2/waiters.py +++ b/src/rai_core/rai/communication/ros2/waiters.py @@ -46,6 +46,8 @@ def wait_for_ros2_entities( if timeout < 0: raise ValueError("Timeout must be 0 (wait forever) or a positive value.") + if time_interval <= 0: + raise ValueError("time_interval must be a positive value.") start_time = time.time() while timeout == 0 or time.time() - start_time < timeout: diff --git a/tests/communication/ros2/test_waiters.py b/tests/communication/ros2/test_waiters.py index 22ed71e1c..f7f5b9db1 100644 --- a/tests/communication/ros2/test_waiters.py +++ b/tests/communication/ros2/test_waiters.py @@ -126,3 +126,14 @@ def test_wait_for_ros2_negative_timeout( with pytest.raises(ValueError): wait_func(connector, [name], time_interval=0.001, timeout=-0.01) + + +def test_wait_for_entities_rejects_non_positive_time_interval(): + with pytest.raises(ValueError, match="time_interval"): + waiters.wait_for_ros2_entities( + ["/x"], lambda: [], time_interval=0, timeout=1.0 + ) + with pytest.raises(ValueError, match="time_interval"): + waiters.wait_for_ros2_entities( + ["/x"], lambda: [], time_interval=-0.5, timeout=1.0 + )