Skip to content

Commit 51b5450

Browse files
author
Mauro Passerino
committed
EventsExecutorEntitiesCollector: Use shared_from_this()
1 parent 41c30bf commit 51b5450

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

rclcpp/include/rclcpp/executors/events_executor_entities_collector.hpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ class EventsExecutor;
4949
* When this occurs, the execute API takes care of handling changes
5050
* in the entities currently used by the executor.
5151
*/
52-
class EventsExecutorEntitiesCollector final : public EventWaitable
52+
class EventsExecutorEntitiesCollector final
53+
: public EventWaitable,
54+
public std::enable_shared_from_this<EventsExecutorEntitiesCollector>
5355
{
5456
public:
5557
RCLCPP_SMART_PTR_DEFINITIONS(EventsExecutorEntitiesCollector)
@@ -63,6 +65,10 @@ class EventsExecutorEntitiesCollector final : public EventWaitable
6365
RCLCPP_PUBLIC
6466
~EventsExecutorEntitiesCollector();
6567

68+
// Initialize entities collector
69+
RCLCPP_PUBLIC
70+
void init();
71+
6672
// The purpose of "execute" is handling the situation of a new entity added to
6773
// a node, while the executor is already spinning.
6874
// This consists in setting that entitiy's callback.
@@ -237,6 +243,8 @@ class EventsExecutorEntitiesCollector final : public EventWaitable
237243
std::list<rclcpp::node_interfaces::NodeBaseInterface::WeakPtr> weak_nodes_;
238244

239245
// Maps: entity identifiers to weak pointers from the entities registered in the executor
246+
// so in the case of an event providing and ID, we can retrieve and own the corresponding
247+
// entity while it performs work
240248
std::unordered_map<const void *, rclcpp::SubscriptionBase::WeakPtr> weak_subscriptions_map_;
241249
std::unordered_map<const void *, rclcpp::ServiceBase::WeakPtr> weak_services_map_;
242250
std::unordered_map<const void *, rclcpp::ClientBase::WeakPtr> weak_clients_map_;

rclcpp/src/rclcpp/executors/events_executor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ EventsExecutor::EventsExecutor(
3131
{
3232
timers_manager_ = std::make_shared<TimersManager>(context_);
3333
entities_collector_ = std::make_shared<EventsExecutorEntitiesCollector>(this);
34+
entities_collector_->init();
3435

3536
// This API uses the wait_set only as a token to identify different executors.
3637
auto context_interrupt_gc = options.context->get_interrupt_guard_condition(&wait_set_);
@@ -42,7 +43,6 @@ EventsExecutor::EventsExecutor(
4243
executor_notifier_->add_guard_condition(&interrupt_guard_condition_);
4344
executor_notifier_->set_events_executor_callback(this, &EventsExecutor::push_event);
4445
entities_collector_->add_waitable(executor_notifier_);
45-
entities_collector_->add_waitable(entities_collector_);
4646
}
4747

4848
void

rclcpp/src/rclcpp/executors/events_executor_entities_collector.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ EventsExecutorEntitiesCollector::~EventsExecutorEntitiesCollector()
8181
weak_groups_to_nodes_associated_with_executor_.clear();
8282
}
8383

84+
void
85+
EventsExecutorEntitiesCollector::init()
86+
{
87+
// Add the EventsExecutorEntitiesCollector shared_ptr to waitables map
88+
add_waitable(this->shared_from_this());
89+
}
90+
8491
void
8592
EventsExecutorEntitiesCollector::add_node(
8693
rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr)

0 commit comments

Comments
 (0)