diff --git a/rclpy/rclpy/executors.py b/rclpy/rclpy/executors.py index fd097a4f2..3e099d8fa 100644 --- a/rclpy/rclpy/executors.py +++ b/rclpy/rclpy/executors.py @@ -327,7 +327,7 @@ def spin_until_future_complete( and not future.cancelled() and not self._is_shutdown ): - self.spin_once_until_future_complete(future, timeout_sec) + self._spin_once_until_future_complete(future, timeout_sec) else: start = time.monotonic() end = start + timeout_sec @@ -339,7 +339,7 @@ def spin_until_future_complete( and not future.cancelled() and not self._is_shutdown ): - self.spin_once_until_future_complete(future, timeout_left) + self._spin_once_until_future_complete(future, timeout_left) now = time.monotonic() if now >= end: @@ -377,6 +377,13 @@ def spin_once_until_future_complete( """ raise NotImplementedError() + def _spin_once_until_future_complete( + self, + future: Future, + timeout_sec: Optional[Union[float, TimeoutObject]] = None + ) -> None: + raise NotImplementedError() + def _take_timer(self, tmr): try: with tmr.handle: @@ -844,13 +851,20 @@ def _spin_once_impl( def spin_once(self, timeout_sec: Optional[float] = None) -> None: self._spin_once_impl(timeout_sec) + def _spin_once_until_future_complete( + self, + future: Future, + timeout_sec: Optional[Union[float, TimeoutObject]] = None + ) -> None: + self._spin_once_impl(timeout_sec, future.done) + def spin_once_until_future_complete( self, future: Future, timeout_sec: Optional[Union[float, TimeoutObject]] = None ) -> None: future.add_done_callback(lambda x: self.wake()) - self._spin_once_impl(timeout_sec, future.done) + self._spin_once_until_future_complete(future, timeout_sec) class MultiThreadedExecutor(Executor): @@ -916,10 +930,17 @@ def _spin_once_impl( def spin_once(self, timeout_sec: Optional[float] = None) -> None: self._spin_once_impl(timeout_sec) + def _spin_once_until_future_complete( + self, + future: Future, + timeout_sec: Optional[Union[float, TimeoutObject]] = None + ) -> None: + self._spin_once_impl(timeout_sec, future.done) + def spin_once_until_future_complete( self, future: Future, timeout_sec: Optional[Union[float, TimeoutObject]] = None ) -> None: future.add_done_callback(lambda x: self.wake()) - self._spin_once_impl(timeout_sec, future.done) + self._spin_once_until_future_complete(future, timeout_sec)