Skip to content

Commit

Permalink
Fini arguments passed to rcl_node_init() (#468)
Browse files Browse the repository at this point in the history
* Fix memory leak in node_base
* Always free arguments
  • Loading branch information
sloretz authored May 1, 2018
1 parent 66a7c62 commit 7cd8429
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions rclcpp/src/rclcpp/node_interfaces/node_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,14 @@ NodeBase::NodeBase(
if (ret != RCL_RET_OK) {
// Finalize the interrupt guard condition.
finalize_notify_guard_condition();
// Finalize previously allocated node arguments
if (RCL_RET_OK != rcl_arguments_fini(&options.arguments)) {
// Print message because exception will be thrown later in this code block
RCUTILS_LOG_ERROR_NAMED(
"rclcpp",
"Failed to fini arguments during error handling: %s", rcl_get_error_string_safe());
rcl_reset_error();
}

if (ret == RCL_RET_NODE_INVALID_NAME) {
rcl_reset_error(); // discard rcl_node_init error
Expand Down Expand Up @@ -183,6 +191,15 @@ NodeBase::NodeBase(

// Indicate the notify_guard_condition is now valid.
notify_guard_condition_is_valid_ = true;

// Finalize previously allocated node arguments
if (RCL_RET_OK != rcl_arguments_fini(&options.arguments)) {
// print message because throwing would prevent the destructor from being called
RCUTILS_LOG_ERROR_NAMED(
"rclcpp",
"Failed to fini arguments: %s", rcl_get_error_string_safe());
rcl_reset_error();
}
}

NodeBase::~NodeBase()
Expand Down

0 comments on commit 7cd8429

Please sign in to comment.