diff --git a/.github/workflows/testpr.yml b/.github/workflows/testpr.yml index 48da09538..4de2934b3 100644 --- a/.github/workflows/testpr.yml +++ b/.github/workflows/testpr.yml @@ -21,7 +21,7 @@ jobs: - os: ubuntu-24.04-arm platform: linux-aarch64 folder_cache: 'output/linux-aarch64' - - os: macos-13 + - os: macos-15-intel platform: osx-64 folder_cache: 'output/osx-64' - os: macos-14 diff --git a/patch/ros-kilted-rclpy.patch b/patch/ros-kilted-rclpy.patch new file mode 100644 index 000000000..177e33c0c --- /dev/null +++ b/patch/ros-kilted-rclpy.patch @@ -0,0 +1,66 @@ +diff --git a/rclpy/src/rclpy/events_executor/events_executor.cpp b/rclpy/src/rclpy/events_executor/events_executor.cpp +index 526d2ca..99a4e91 100644 +--- a/rclpy/src/rclpy/events_executor/events_executor.cpp ++++ b/rclpy/src/rclpy/events_executor/events_executor.cpp +@@ -172,7 +172,7 @@ void EventsExecutor::spin(std::optional timeout_sec, bool stop_after_use + const auto timeout_ns = std::chrono::duration_cast( + std::chrono::duration(*timeout_sec)); + const auto end = std::chrono::steady_clock::now() + timeout_ns; +- events_queue_.RunUntil(end); ++ events_queue_.Run(end); + } else { + events_queue_.Run(); + } +diff --git a/rclpy/src/rclpy/events_executor/events_queue.cpp b/rclpy/src/rclpy/events_executor/events_queue.cpp +index a65c22b..6fa0aac 100644 +--- a/rclpy/src/rclpy/events_executor/events_queue.cpp ++++ b/rclpy/src/rclpy/events_executor/events_queue.cpp +@@ -29,15 +29,18 @@ void EventsQueue::Enqueue(std::function event_handler) + cv_.notify_one(); + } + +-void EventsQueue::Run() {RunUntil(std::chrono::steady_clock::time_point::max());} +- +-void EventsQueue::RunUntil(std::chrono::steady_clock::time_point deadline) ++void EventsQueue::Run(const std::optional deadline) + { + while (true) { + std::function handler; + { + std::unique_lock lock(mutex_); +- cv_.wait_until(lock, deadline, [this]() {return stopped_ || !queue_.empty();}); ++ auto pred = [this]() {return stopped_ || !queue_.empty();}; ++ if (deadline) { ++ cv_.wait_until(lock, *deadline, pred); ++ } else { ++ cv_.wait(lock, pred); ++ } + if (stopped_ || queue_.empty()) { + // We stopped for some reason other than being ready to run something (stopped or timeout) + return; +diff --git a/rclpy/src/rclpy/events_executor/events_queue.hpp b/rclpy/src/rclpy/events_executor/events_queue.hpp +index a6d7b59..3012313 100644 +--- a/rclpy/src/rclpy/events_executor/events_queue.hpp ++++ b/rclpy/src/rclpy/events_executor/events_queue.hpp +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + namespace rclpy + { +@@ -37,12 +38,9 @@ public: + /// Add an event handler to the queue to be dispatched. Can be invoked by any thread. + void Enqueue(std::function); + +- /// Run event handlers indefinitely, until stopped. +- void Run(); +- + /// Run all ready event handlers, and any that become ready before the given deadline. Calling + /// Stop() will make this return immediately even if ready handlers are enqueued. +- void RunUntil(std::chrono::steady_clock::time_point); ++ void Run(const std::optional = {}); + + /// Causes any Run*() methods outstanding to return immediately. Can be invoked from any thread. + /// The stopped condition persists (causing any *subsequent* Run*() calls to also return) until diff --git a/pkg_additional_info.yaml b/pkg_additional_info.yaml index 5bacb3d35..0cef197b6 100644 --- a/pkg_additional_info.yaml +++ b/pkg_additional_info.yaml @@ -146,3 +146,5 @@ proxsuite: dep_name: proxsuite max_pin: 'x.x' override_version: '0.7.2' +rclpy: + build_number: 15 \ No newline at end of file