@@ -65,6 +65,7 @@ rmw_create_subscription(
6565{
6666 (void )subscription_options ;
6767
68+ rmw_uxrce_subscription_t * custom_subscription = NULL ;
6869 rmw_subscription_t * rmw_subscription = NULL ;
6970 if (!node ) {
7071 RMW_UROS_TRACE_MESSAGE ("node handle is null" )
@@ -85,10 +86,10 @@ rmw_create_subscription(
8586 RMW_UROS_TRACE_MESSAGE ("Not available memory node" )
8687 return NULL ;
8788 }
88- rmw_uxrce_subscription_t * custom_subscription = (rmw_uxrce_subscription_t * )memory_node -> data ;
89+ custom_subscription = (rmw_uxrce_subscription_t * )memory_node -> data ;
8990
9091 rmw_subscription = & custom_subscription -> rmw_subscription ;
91- rmw_subscription -> data = NULL ;
92+ rmw_subscription -> data = custom_subscription ;
9293 rmw_subscription -> implementation_identifier = rmw_get_implementation_identifier ();
9394 rmw_subscription -> topic_name = custom_subscription -> topic_name ;
9495 if ((strlen (topic_name ) + 1 ) > sizeof (custom_subscription -> topic_name )) {
@@ -159,7 +160,6 @@ rmw_create_subscription(
159160 custom_node -> context , custom_node -> context -> creation_stream , subscriber_req ,
160161 custom_node -> context -> creation_timeout ))
161162 {
162- put_memory (& subscription_memory , & custom_subscription -> mem );
163163 goto fail ;
164164 }
165165
@@ -198,12 +198,9 @@ rmw_create_subscription(
198198 custom_node -> context -> creation_timeout ))
199199 {
200200 RMW_UROS_TRACE_MESSAGE ("Issues creating Micro XRCE-DDS entities" )
201- put_memory (& subscription_memory , & custom_subscription -> mem );
202201 goto fail ;
203202 }
204203
205- rmw_subscription -> data = custom_subscription ;
206-
207204 uxrDeliveryControl delivery_control ;
208205 delivery_control .max_samples = UXR_MAX_SAMPLES_UNLIMITED ;
209206 delivery_control .min_pace_period = 0 ;
@@ -223,6 +220,10 @@ rmw_create_subscription(
223220 return rmw_subscription ;
224221
225222fail :
223+ if (custom_subscription != NULL && custom_subscription -> topic != NULL ) {
224+ rmw_uxrce_fini_topic_memory (custom_subscription -> topic );
225+ }
226+
226227 rmw_uxrce_fini_subscription_memory (rmw_subscription );
227228 rmw_subscription = NULL ;
228229 return rmw_subscription ;
0 commit comments