diff --git a/rmw_microxrcedds_c/src/rmw_client.c b/rmw_microxrcedds_c/src/rmw_client.c index 4977b9c1..05a64cb9 100644 --- a/rmw_microxrcedds_c/src/rmw_client.c +++ b/rmw_microxrcedds_c/src/rmw_client.c @@ -160,7 +160,6 @@ rmw_create_client( custom_node->context, custom_node->context->creation_stream, client_req, custom_node->context->creation_timeout)) { - put_memory(&client_memory, &custom_client->mem); goto fail; } diff --git a/rmw_microxrcedds_c/src/rmw_publisher.c b/rmw_microxrcedds_c/src/rmw_publisher.c index 70e18606..b9e115f5 100644 --- a/rmw_microxrcedds_c/src/rmw_publisher.c +++ b/rmw_microxrcedds_c/src/rmw_publisher.c @@ -66,7 +66,7 @@ rmw_create_publisher( const rmw_publisher_options_t * publisher_options) { (void)publisher_options; - + rmw_uxrce_publisher_t *publisher_data = NULL; rmw_publisher_t * rmw_publisher = NULL; if (!node) { RMW_UROS_TRACE_MESSAGE("node handle is null") @@ -112,6 +112,8 @@ rmw_create_publisher( custom_publisher->cs_cb_size = NULL; custom_publisher->cs_cb_serialization = NULL; + rmw_publisher->data = custom_publisher; + const rosidl_message_type_support_t * type_support_xrce = NULL; #ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE type_support_xrce = get_message_typesupport_handle( @@ -171,12 +173,9 @@ rmw_create_publisher( custom_node->context, custom_node->context->creation_stream, publisher_req, custom_node->context->creation_timeout)) { - put_memory(&publisher_memory, &custom_publisher->mem); goto fail; } - rmw_publisher->data = custom_publisher; - // Create datawriter custom_publisher->datawriter_id = uxr_object_id( custom_node->context->id_datawriter++, @@ -212,13 +211,17 @@ rmw_create_publisher( custom_node->context, custom_node->context->creation_stream, datawriter_req, custom_node->context->creation_timeout)) { - put_memory(&publisher_memory, &custom_publisher->mem); goto fail; } } return rmw_publisher; fail: + publisher_data = (rmw_uxrce_publisher_t *)rmw_publisher->data; + if (publisher_data != NULL && publisher_data->topic != NULL) + { + rmw_uxrce_fini_topic_memory(publisher_data->topic); + } rmw_uxrce_fini_publisher_memory(rmw_publisher); rmw_publisher = NULL; return rmw_publisher; diff --git a/rmw_microxrcedds_c/src/rmw_service.c b/rmw_microxrcedds_c/src/rmw_service.c index 75865cde..de1cd8d9 100644 --- a/rmw_microxrcedds_c/src/rmw_service.c +++ b/rmw_microxrcedds_c/src/rmw_service.c @@ -159,7 +159,6 @@ rmw_create_service( custom_node->context->creation_timeout)) { RMW_UROS_TRACE_MESSAGE("Issues creating Micro XRCE-DDS entities") - put_memory(&service_memory, &custom_service->mem); goto fail; } diff --git a/rmw_microxrcedds_c/src/rmw_subscription.c b/rmw_microxrcedds_c/src/rmw_subscription.c index a13a7988..23558362 100644 --- a/rmw_microxrcedds_c/src/rmw_subscription.c +++ b/rmw_microxrcedds_c/src/rmw_subscription.c @@ -64,7 +64,7 @@ rmw_create_subscription( const rmw_subscription_options_t * subscription_options) { (void)subscription_options; - + rmw_uxrce_subscription_t *subscription_data = NULL; rmw_subscription_t * rmw_subscription = NULL; if (!node) { RMW_UROS_TRACE_MESSAGE("node handle is null") @@ -103,6 +103,8 @@ rmw_create_subscription( custom_subscription->owner_node = custom_node; custom_subscription->qos = *qos_policies; + rmw_subscription->data = custom_subscription; + const rosidl_message_type_support_t * type_support_xrce = NULL; #ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE type_support_xrce = get_message_typesupport_handle( @@ -159,7 +161,6 @@ rmw_create_subscription( custom_node->context, custom_node->context->creation_stream, subscriber_req, custom_node->context->creation_timeout)) { - put_memory(&subscription_memory, &custom_subscription->mem); goto fail; } @@ -198,12 +199,8 @@ rmw_create_subscription( custom_node->context->creation_timeout)) { RMW_UROS_TRACE_MESSAGE("Issues creating Micro XRCE-DDS entities") - put_memory(&subscription_memory, &custom_subscription->mem); goto fail; } - - rmw_subscription->data = custom_subscription; - uxrDeliveryControl delivery_control; delivery_control.max_samples = UXR_MAX_SAMPLES_UNLIMITED; delivery_control.min_pace_period = 0; @@ -223,6 +220,11 @@ rmw_create_subscription( return rmw_subscription; fail: + subscription_data = (rmw_uxrce_subscription_t *)rmw_subscription->data; + if ((subscription_data != NULL) && (subscription_data->topic != NULL)) + { + rmw_uxrce_fini_topic_memory(subscription_data->topic); + } rmw_uxrce_fini_subscription_memory(rmw_subscription); rmw_subscription = NULL; return rmw_subscription;