Skip to content

Commit

Permalink
Make sure to always check return values.
Browse files Browse the repository at this point in the history
Pointed out by clang static analysis, we should always
check these return values.

Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
  • Loading branch information
clalancette committed Oct 26, 2020
1 parent 5ef4b2d commit f8a75fa
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
18 changes: 17 additions & 1 deletion rcl_action/src/rcl_action/graph.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,10 @@ _filter_action_names(
// Cleanup if there is an error
if (RCL_RET_OK != ret) {
rcl_ret_t fini_ret = rcl_names_and_types_fini(action_names_and_types);
(void)fini_ret; // Error already set
if (RCL_RET_OK != fini_ret) {
RCUTILS_SAFE_FWRITE_TO_STDERR(
"Freeing names and types failed while handling a previous error. Leaking memory!");
}
}

return ret;
Expand Down Expand Up @@ -154,6 +157,10 @@ rcl_action_get_client_names_and_types_by_node(
rcl_ret_t nat_fini_ret = rcl_names_and_types_fini(&topic_names_and_types);
if (RCL_RET_OK != nat_fini_ret) {
ret = rcl_names_and_types_fini(action_names_and_types);
if (RCL_RET_OK != ret) {
RCUTILS_SAFE_FWRITE_TO_STDERR(
"Freeing names and types failed while handling a previous error. Leaking memory!");
}
return nat_fini_ret;
}
return ret;
Expand Down Expand Up @@ -185,6 +192,11 @@ rcl_action_get_server_names_and_types_by_node(
rcl_ret_t nat_fini_ret = rcl_names_and_types_fini(&topic_names_and_types);
if (RCL_RET_OK != nat_fini_ret) {
ret = rcl_names_and_types_fini(action_names_and_types);
if (RCL_RET_OK != ret) {
RCUTILS_SAFE_FWRITE_TO_STDERR(
"Freeing names and types failed while handling a previous error. Leaking memory!");
}

return nat_fini_ret;
}
return ret;
Expand All @@ -211,6 +223,10 @@ rcl_action_get_names_and_types(
rcl_ret_t nat_fini_ret = rcl_names_and_types_fini(&topic_names_and_types);
if (RCL_RET_OK != nat_fini_ret) {
ret = rcl_names_and_types_fini(action_names_and_types);
if (RCL_RET_OK != ret) {
RCUTILS_SET_ERROR_MSG(
"Freeing names and types failed while handling a previous error. Leaking memory!");
}
return nat_fini_ret;
}
return ret;
Expand Down
4 changes: 4 additions & 0 deletions rcl_lifecycle/src/rcl_lifecycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,10 @@ rcl_lifecycle_state_machine_init(
// init default state machine might have allocated memory,
// so we have to call fini
ret = rcl_lifecycle_state_machine_fini(state_machine, node_handle, allocator);
if (ret != RCL_RET_OK) {
RCUTILS_SAFE_FWRITE_TO_STDERR(
"Freeing state machine failed while handling a previous error. Leaking memory!");
}
return RCL_RET_ERROR;
}
}
Expand Down

0 comments on commit f8a75fa

Please sign in to comment.