@@ -194,6 +194,7 @@ rcl_subscription_init(
194194fail :
195195 if (subscription -> impl ) {
196196 allocator -> deallocate (subscription -> impl , allocator -> state );
197+ subscription -> impl = NULL ;
197198 }
198199 ret = fail_ret ;
199200 // Fall through to cleanup
@@ -229,6 +230,7 @@ rcl_subscription_fini(rcl_subscription_t * subscription, rcl_node_t * node)
229230 result = RCL_RET_ERROR ;
230231 }
231232 allocator .deallocate (subscription -> impl , allocator .state );
233+ subscription -> impl = NULL ;
232234 }
233235 RCUTILS_LOG_DEBUG_NAMED (ROS_PACKAGE_NAME , "Subscription finalized" );
234236 return result ;
@@ -292,10 +294,6 @@ rcl_take_sequence(
292294 rmw_subscription_allocation_t * allocation
293295)
294296{
295- // Set the sizes to zero to indicate that there are no valid messages
296- message_sequence -> size = 0u ;
297- message_info_sequence -> size = 0u ;
298-
299297 RCUTILS_LOG_DEBUG_NAMED (ROS_PACKAGE_NAME , "Subscription taking %zu messages" , count );
300298 if (!rcl_subscription_is_valid (subscription )) {
301299 return RCL_RET_SUBSCRIPTION_INVALID ; // error message already set
@@ -313,6 +311,10 @@ rcl_take_sequence(
313311 return RCL_RET_INVALID_ARGUMENT ;
314312 }
315313
314+ // Set the sizes to zero to indicate that there are no valid messages
315+ message_sequence -> size = 0u ;
316+ message_info_sequence -> size = 0u ;
317+
316318 size_t taken = 0u ;
317319 rmw_ret_t ret = rmw_take_sequence (
318320 subscription -> impl -> rmw_handle , count , message_sequence , message_info_sequence , & taken ,
@@ -376,6 +378,7 @@ rcl_take_loaned_message(
376378 if (!rcl_subscription_is_valid (subscription )) {
377379 return RCL_RET_SUBSCRIPTION_INVALID ; // error already set
378380 }
381+ RCL_CHECK_ARGUMENT_FOR_NULL (loaned_message , RCL_RET_INVALID_ARGUMENT );
379382 if (* loaned_message ) {
380383 RCL_SET_ERROR_MSG ("loaned message is already initialized" );
381384 return RCL_RET_INVALID_ARGUMENT ;
0 commit comments