File tree Expand file tree Collapse file tree 2 files changed +31
-0
lines changed Expand file tree Collapse file tree 2 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -178,6 +178,12 @@ struct ExecutorEntitiesCollection
178178
179179 // / Clear the entities collection
180180 void clear ();
181+
182+ // / Remove entities that have expired weak ownership
183+ /* *
184+ * \return The total number of removed entities
185+ */
186+ size_t remove_expired_entities ();
181187};
182188
183189// / Build an entities collection from callback groups
Original file line number Diff line number Diff line change @@ -39,6 +39,31 @@ void ExecutorEntitiesCollection::clear()
3939 waitables.clear ();
4040}
4141
42+ size_t ExecutorEntitiesCollection::remove_expired_entities ()
43+ {
44+ auto remove_entities = [](auto & collection) -> size_t {
45+ size_t removed = 0 ;
46+ for (auto it = collection.begin (); it != collection.end (); )
47+ {
48+ if (it->second .entity .expired ()) {
49+ ++removed;
50+ it = collection.erase (it);
51+ } else {
52+ ++it;
53+ }
54+ }
55+ return removed;
56+ };
57+
58+ return (
59+ remove_entities (subscriptions) +
60+ remove_entities (timers) +
61+ remove_entities (guard_conditions) +
62+ remove_entities (clients) +
63+ remove_entities (services) +
64+ remove_entities (waitables));
65+ }
66+
4267void
4368build_entities_collection (
4469 const std::vector<rclcpp::CallbackGroup::WeakPtr> & callback_groups,
You can’t perform that action at this time.
0 commit comments