2323
2424#include " rcl/allocator.h"
2525#include " rcl/error_handling.h"
26+ #include " rclcpp/subscription_wait_set_mask.hpp"
2627#include " rcpputils/scope_exit.hpp"
2728
2829#include " rclcpp/exceptions.hpp"
@@ -39,6 +40,8 @@ using namespace std::chrono_literals;
3940
4041using rclcpp::Executor;
4142
43+ static constexpr rclcpp::SubscriptionWaitSetMask kDefaultSubscriptionMask = {true , false , false };
44+
4245Executor::Executor (const rclcpp::ExecutorOptions & options)
4346: spinning(false ),
4447 interrupt_guard_condition_(options.context),
@@ -56,35 +59,39 @@ Executor::Executor(const rclcpp::ExecutorOptions & options)
5659 }
5760 });
5861
59- this ->collector_ .get_executor_notify_waitable ()->add_guard_condition (&interrupt_guard_condition_);
60- this ->collector_ .get_executor_notify_waitable ()->add_guard_condition (shutdown_guard_condition_.get ());
62+ this ->collector_ .get_executor_notify_waitable ()->add_guard_condition (
63+ &interrupt_guard_condition_);
64+ this ->collector_ .get_executor_notify_waitable ()->add_guard_condition (
65+ shutdown_guard_condition_.get ());
6166}
6267
6368Executor::~Executor ()
6469{
6570 current_collection_.update_timers ({},
66- [this ](auto timer){wait_set_->add_timer (timer);},
67- [this ](auto timer){wait_set_->remove_timer (timer);});
71+ [this ](auto timer){wait_set_->add_timer (timer);},
72+ [this ](auto timer){wait_set_->remove_timer (timer);});
6873
6974 current_collection_.update_subscriptions ({},
70- [this ](auto subscription){wait_set_->add_subscription (subscription, {true , false , false });},
71- [this ](auto subscription){wait_set_->remove_subscription (subscription, {true , false , false });});
75+ [this ](auto subscription){
76+ wait_set_->add_subscription (subscription, kDefaultSubscriptionMask );},
77+ [this ](auto subscription){
78+ wait_set_->remove_subscription (subscription, kDefaultSubscriptionMask );});
7279
7380 current_collection_.update_clients ({},
74- [this ](auto client){wait_set_->add_client (client);},
75- [this ](auto client){wait_set_->remove_client (client);});
81+ [this ](auto client){wait_set_->add_client (client);},
82+ [this ](auto client){wait_set_->remove_client (client);});
7683
7784 current_collection_.update_services ({},
78- [this ](auto service){wait_set_->add_service (service);},
79- [this ](auto service){wait_set_->remove_service (service);});
85+ [this ](auto service){wait_set_->add_service (service);},
86+ [this ](auto service){wait_set_->remove_service (service);});
8087
8188 current_collection_.update_guard_conditions ({},
82- [this ](auto guard_condition){wait_set_->add_guard_condition (guard_condition);},
83- [this ](auto guard_condition){wait_set_->remove_guard_condition (guard_condition);});
89+ [this ](auto guard_condition){wait_set_->add_guard_condition (guard_condition);},
90+ [this ](auto guard_condition){wait_set_->remove_guard_condition (guard_condition);});
8491
8592 current_collection_.update_waitables ({},
86- [this ](auto waitable){wait_set_->add_waitable (waitable);},
87- [this ](auto waitable){wait_set_->remove_waitable (waitable);});
93+ [this ](auto waitable){wait_set_->add_waitable (waitable);},
94+ [this ](auto waitable){wait_set_->remove_waitable (waitable);});
8895
8996 // Remove shutdown callback handle registered to Context
9097 if (!context_->remove_on_shutdown_callback (shutdown_callback_handle_)) {
@@ -510,28 +517,30 @@ Executor::wait_for_work(std::chrono::nanoseconds timeout)
510517 rclcpp::executors::build_entities_collection (callback_groups, collection);
511518
512519 current_collection_.update_timers (collection.timers ,
513- [this ](auto timer){wait_set_->add_timer (timer);},
514- [this ](auto timer){wait_set_->remove_timer (timer);});
520+ [this ](auto timer){wait_set_->add_timer (timer);},
521+ [this ](auto timer){wait_set_->remove_timer (timer);});
515522
516523 current_collection_.update_subscriptions (collection.subscriptions ,
517- [this ](auto subscription){wait_set_->add_subscription (subscription, {true , false , false });},
518- [this ](auto subscription){wait_set_->remove_subscription (subscription, {true , false , false });});
524+ [this ](auto subscription){
525+ wait_set_->add_subscription (subscription, kDefaultSubscriptionMask );},
526+ [this ](auto subscription){
527+ wait_set_->remove_subscription (subscription, kDefaultSubscriptionMask );});
519528
520529 current_collection_.update_clients (collection.clients ,
521- [this ](auto client){wait_set_->add_client (client);},
522- [this ](auto client){wait_set_->remove_client (client);});
530+ [this ](auto client){wait_set_->add_client (client);},
531+ [this ](auto client){wait_set_->remove_client (client);});
523532
524533 current_collection_.update_services (collection.services ,
525- [this ](auto service){wait_set_->add_service (service);},
526- [this ](auto service){wait_set_->remove_service (service);});
534+ [this ](auto service){wait_set_->add_service (service);},
535+ [this ](auto service){wait_set_->remove_service (service);});
527536
528537 current_collection_.update_guard_conditions (collection.guard_conditions ,
529- [this ](auto guard_condition){wait_set_->add_guard_condition (guard_condition);},
530- [this ](auto guard_condition){wait_set_->remove_guard_condition (guard_condition);});
538+ [this ](auto guard_condition){wait_set_->add_guard_condition (guard_condition);},
539+ [this ](auto guard_condition){wait_set_->remove_guard_condition (guard_condition);});
531540
532541 current_collection_.update_waitables (collection.waitables ,
533- [this ](auto waitable){wait_set_->add_waitable (waitable);},
534- [this ](auto waitable){wait_set_->remove_waitable (waitable);});
542+ [this ](auto waitable){wait_set_->add_waitable (waitable);},
543+ [this ](auto waitable){wait_set_->remove_waitable (waitable);});
535544 }
536545
537546 auto wait_result = wait_set_->wait (timeout);
@@ -561,7 +570,8 @@ Executor::get_next_ready_executable(AnyExecutable & any_executable)
561570 any_executable = ready_executables_.front ();
562571 ready_executables_.pop_front ();
563572
564- if (any_executable.callback_group && any_executable.callback_group ->type () == CallbackGroupType::MutuallyExclusive)
573+ if (any_executable.callback_group &&
574+ any_executable.callback_group ->type () == CallbackGroupType::MutuallyExclusive)
565575 {
566576 assert (any_executable.callback_group ->can_be_taken_from ().load ());
567577 any_executable.callback_group ->can_be_taken_from ().store (false );
0 commit comments