Skip to content

Commit fc1a24c

Browse files
Barry-Xu-2018jacobperron
authored andcommitted
Fix memory leak in rcl_subscription_init()/rcl_publisher_init() (#794)
* Fix memory leak in rcl_subscription_init()/rcl_publisher_init() In rcl_subscription_init(), while rmw_subscription_get_actual_qos() return failure, created rmw subscription handle isn't freed. In rcl_publisher_init(), while rmw_publisher_get_actual_qos() return failure, created rmw publisher handle isn't freed. Signed-off-by: Barry Xu <[email protected]> * Remove codes on the cascading errors. Signed-off-by: Barry Xu <[email protected]> * Change code style Signed-off-by: Barry Xu <[email protected]> * Output error message to stderr Signed-off-by: Barry Xu <[email protected]>
1 parent 06b4240 commit fc1a24c

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

rcl/src/rcl/publisher.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,15 @@ rcl_publisher_init(
197197
goto cleanup;
198198
fail:
199199
if (publisher->impl) {
200+
if (publisher->impl->rmw_handle) {
201+
rmw_ret_t rmw_fail_ret = rmw_destroy_publisher(
202+
rcl_node_get_rmw_handle(node), publisher->impl->rmw_handle);
203+
if (RMW_RET_OK != rmw_fail_ret) {
204+
RCUTILS_SAFE_FWRITE_TO_STDERR_WITH_FORMAT_STRING(
205+
"%s, at %s:%d\n", rmw_get_error_string().str, __FILE__, __LINE__);
206+
}
207+
}
208+
200209
allocator->deallocate(publisher->impl, allocator->state);
201210
}
202211

rcl/src/rcl/subscription.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,15 @@ rcl_subscription_init(
193193
goto cleanup;
194194
fail:
195195
if (subscription->impl) {
196+
if (subscription->impl->rmw_handle) {
197+
rmw_ret_t rmw_fail_ret = rmw_destroy_subscription(
198+
rcl_node_get_rmw_handle(node), subscription->impl->rmw_handle);
199+
if (RMW_RET_OK != rmw_fail_ret) {
200+
RCUTILS_SAFE_FWRITE_TO_STDERR_WITH_FORMAT_STRING(
201+
"%s, at %s:%d\n", rmw_get_error_string().str, __FILE__, __LINE__);
202+
}
203+
}
204+
196205
allocator->deallocate(subscription->impl, allocator->state);
197206
}
198207
ret = fail_ret;

0 commit comments

Comments
 (0)