Skip to content

Commit 681ccfa

Browse files
naiveHoboryan-sandzimier
authored andcommitted
Fix memory leak (#1900)
* Fix memory leak in nav2_recoveries * Fix recovery server memory leak (better interface) * Fix costmap2d memory leak * Fix nav2_navfn_planner memory leak * Fix planner server and navfn planner memory leak * Make all rclcpp::Node::SharedPtr argument passing const * Fix controller server and DWB plugins memory leak * Minor fixes * Fix formatting errors * Change all plugin interfaces to use weak_ptr intead of shared_ptr to parent rclcpp::Node * Convert all SharedPtr to WeakPtr * Check shared_ptr after lock and before dereferencing
1 parent fa1a64a commit 681ccfa

File tree

65 files changed

+712
-558
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+712
-558
lines changed

nav2_amcl/src/amcl_node.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,6 @@ AmclNode::AmclNode()
225225

226226
AmclNode::~AmclNode()
227227
{
228-
RCLCPP_INFO(get_logger(), "Destroying");
229228
}
230229

231230
nav2_util::CallbackReturn

nav2_bringup/bringup/params/nav2_multirobot_params_1.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ bt_navigator:
6969
- nav2_rate_controller_bt_node
7070
- nav2_distance_controller_bt_node
7171
- nav2_speed_controller_bt_node
72+
- nav2_truncate_path_action_bt_node
73+
- nav2_goal_updater_node_bt_node
7274
- nav2_recovery_node_bt_node
7375
- nav2_pipeline_sequence_bt_node
7476
- nav2_transform_available_condition_bt_node

nav2_bringup/bringup/params/nav2_multirobot_params_2.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ bt_navigator:
6969
- nav2_rate_controller_bt_node
7070
- nav2_distance_controller_bt_node
7171
- nav2_speed_controller_bt_node
72+
- nav2_truncate_path_action_bt_node
73+
- nav2_goal_updater_node_bt_node
7274
- nav2_recovery_node_bt_node
7375
- nav2_pipeline_sequence_bt_node
7476
- nav2_transform_available_condition_bt_node

nav2_bt_navigator/include/nav2_bt_navigator/ros_topic_logger.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace nav2_bt_navigator
2727
class RosTopicLogger : public BT::StatusChangeLogger
2828
{
2929
public:
30-
RosTopicLogger(const rclcpp::Node::SharedPtr & ros_node, const BT::Tree & tree);
30+
RosTopicLogger(const rclcpp::Node::WeakPtr & ros_node, const BT::Tree & tree);
3131

3232
void callback(
3333
BT::Duration timestamp,
@@ -38,7 +38,8 @@ class RosTopicLogger : public BT::StatusChangeLogger
3838
void flush() override;
3939

4040
protected:
41-
rclcpp::Node::SharedPtr ros_node_;
41+
rclcpp::Clock::SharedPtr clock_;
42+
rclcpp::Logger logger_{rclcpp::get_logger("bt_navigator")};
4243
rclcpp::Publisher<nav2_msgs::msg::BehaviorTreeLog>::SharedPtr log_pub_;
4344
std::vector<nav2_msgs::msg::BehaviorTreeStatusChange> event_log_;
4445
};

nav2_bt_navigator/src/bt_navigator.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
#include <fstream>
1818
#include <memory>
19-
#include <streambuf>
2019
#include <string>
2120
#include <utility>
2221
#include <vector>
@@ -52,7 +51,7 @@ BtNavigator::BtNavigator()
5251
"nav2_distance_controller_bt_node",
5352
"nav2_speed_controller_bt_node",
5453
"nav2_truncate_path_action_bt_node",
55-
"nav2_change_goal_node_bt_node",
54+
"nav2_goal_updater_node_bt_node",
5655
"nav2_recovery_node_bt_node",
5756
"nav2_pipeline_sequence_bt_node",
5857
"nav2_round_robin_node_bt_node",
@@ -72,7 +71,6 @@ BtNavigator::BtNavigator()
7271

7372
BtNavigator::~BtNavigator()
7473
{
75-
RCLCPP_INFO(get_logger(), "Destroying");
7674
}
7775

7876
nav2_util::CallbackReturn
@@ -246,7 +244,7 @@ BtNavigator::navigateToPose()
246244
auto bt_xml_filename = action_server_->get_current_goal()->behavior_tree;
247245

248246
// Empty id in request is default for backward compatibility
249-
bt_xml_filename = bt_xml_filename == "" ? default_bt_xml_filename_ : bt_xml_filename;
247+
bt_xml_filename = bt_xml_filename.empty() ? default_bt_xml_filename_ : bt_xml_filename;
250248

251249
if (!loadBehaviorTree(bt_xml_filename)) {
252250
RCLCPP_ERROR(

nav2_bt_navigator/src/ros_topic_logger.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ namespace nav2_bt_navigator
2121
{
2222

2323
RosTopicLogger::RosTopicLogger(
24-
const rclcpp::Node::SharedPtr & ros_node, const BT::Tree & tree)
25-
: StatusChangeLogger(tree.rootNode()), ros_node_(ros_node)
24+
const rclcpp::Node::WeakPtr & ros_node, const BT::Tree & tree)
25+
: StatusChangeLogger(tree.rootNode())
2626
{
27-
log_pub_ = ros_node_->create_publisher<nav2_msgs::msg::BehaviorTreeLog>(
27+
auto node = ros_node.lock();
28+
clock_ = node->get_clock();
29+
logger_ = node->get_logger();
30+
log_pub_ = node->create_publisher<nav2_msgs::msg::BehaviorTreeLog>(
2831
"behavior_tree_log",
2932
rclcpp::QoS(10));
3033
}
@@ -51,7 +54,7 @@ void RosTopicLogger::callback(
5154
event_log_.push_back(std::move(event));
5255

5356
RCLCPP_DEBUG(
54-
ros_node_->get_logger(), "[%.3f]: %25s %s -> %s",
57+
logger_, "[%.3f]: %25s %s -> %s",
5558
std::chrono::duration<double>(timestamp).count(),
5659
node.name().c_str(),
5760
toStr(prev_status, true).c_str(),
@@ -60,9 +63,9 @@ void RosTopicLogger::callback(
6063

6164
void RosTopicLogger::flush()
6265
{
63-
if (event_log_.size() > 0) {
66+
if (!event_log_.empty()) {
6467
auto log_msg = std::make_unique<nav2_msgs::msg::BehaviorTreeLog>();
65-
log_msg->timestamp = ros_node_->now();
68+
log_msg->timestamp = clock_->now();
6669
log_msg->event_log = event_log_;
6770
log_pub_->publish(std::move(log_msg));
6871
event_log_.clear();

nav2_controller/include/nav2_controller/plugins/simple_goal_checker.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class SimpleGoalChecker : public nav2_core::GoalChecker
5858
SimpleGoalChecker();
5959
// Standard GoalChecker Interface
6060
void initialize(
61-
const rclcpp_lifecycle::LifecycleNode::SharedPtr & nh,
61+
const rclcpp_lifecycle::LifecycleNode::WeakPtr & parent,
6262
const std::string & plugin_name) override;
6363
void reset() override;
6464
bool isGoalReached(

nav2_controller/include/nav2_controller/plugins/simple_progress_checker.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class SimpleProgressChecker : public nav2_core::ProgressChecker
3434
{
3535
public:
3636
void initialize(
37-
const rclcpp_lifecycle::LifecycleNode::SharedPtr & node,
37+
const rclcpp_lifecycle::LifecycleNode::WeakPtr & parent,
3838
const std::string & plugin_name) override;
3939
bool check(geometry_msgs::msg::PoseStamped & current_pose) override;
4040
void reset() override;
@@ -52,7 +52,7 @@ class SimpleProgressChecker : public nav2_core::ProgressChecker
5252
*/
5353
void reset_baseline_pose(const geometry_msgs::msg::Pose2D & pose);
5454

55-
rclcpp_lifecycle::LifecycleNode::SharedPtr nh_;
55+
rclcpp::Clock::SharedPtr clock_;
5656

5757
double radius_;
5858
rclcpp::Duration time_allowance_{0, 0};

nav2_controller/include/nav2_controller/plugins/stopped_goal_checker.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class StoppedGoalChecker : public SimpleGoalChecker
5555
StoppedGoalChecker();
5656
// Standard GoalChecker Interface
5757
void initialize(
58-
const rclcpp_lifecycle::LifecycleNode::SharedPtr & nh,
58+
const rclcpp_lifecycle::LifecycleNode::WeakPtr & parent,
5959
const std::string & plugin_name) override;
6060
bool isGoalReached(
6161
const geometry_msgs::msg::Pose & query_pose, const geometry_msgs::msg::Pose & goal_pose,

nav2_controller/plugins/simple_goal_checker.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,24 @@ SimpleGoalChecker::SimpleGoalChecker()
5656
}
5757

5858
void SimpleGoalChecker::initialize(
59-
const rclcpp_lifecycle::LifecycleNode::SharedPtr & nh,
59+
const rclcpp_lifecycle::LifecycleNode::WeakPtr & parent,
6060
const std::string & plugin_name)
6161
{
62+
auto node = parent.lock();
63+
6264
nav2_util::declare_parameter_if_not_declared(
63-
nh,
65+
node,
6466
plugin_name + ".xy_goal_tolerance", rclcpp::ParameterValue(0.25));
6567
nav2_util::declare_parameter_if_not_declared(
66-
nh,
68+
node,
6769
plugin_name + ".yaw_goal_tolerance", rclcpp::ParameterValue(0.25));
6870
nav2_util::declare_parameter_if_not_declared(
69-
nh,
71+
node,
7072
plugin_name + ".stateful", rclcpp::ParameterValue(true));
7173

72-
nh->get_parameter(plugin_name + ".xy_goal_tolerance", xy_goal_tolerance_);
73-
nh->get_parameter(plugin_name + ".yaw_goal_tolerance", yaw_goal_tolerance_);
74-
nh->get_parameter(plugin_name + ".stateful", stateful_);
74+
node->get_parameter(plugin_name + ".xy_goal_tolerance", xy_goal_tolerance_);
75+
node->get_parameter(plugin_name + ".yaw_goal_tolerance", yaw_goal_tolerance_);
76+
node->get_parameter(plugin_name + ".stateful", stateful_);
7577

7678
xy_goal_tolerance_sq_ = xy_goal_tolerance_ * xy_goal_tolerance_;
7779
}

0 commit comments

Comments
 (0)