Skip to content

Commit f3f84f6

Browse files
hidmicahcorde
authored andcommitted
Improve error checking and handling in subscription APIs. (#739)
Signed-off-by: Michel Hidalgo <[email protected]>
1 parent 483d516 commit f3f84f6

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

rcl/src/rcl/subscription.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ rcl_subscription_init(
194194
fail:
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

Comments
 (0)