[rcl] Return appropriate error code when there is a bad allocation

This commit is contained in:
Jacob Perron 2018-11-05 15:06:01 -08:00
parent 48c168a5ca
commit e6985c0226
2 changed files with 14 additions and 8 deletions

View file

@ -76,7 +76,7 @@ rcl_service_init(
rcutils_ret_t rcutils_ret = rcutils_string_map_init(&substitutions_map, 0, rcutils_allocator); rcutils_ret_t rcutils_ret = rcutils_string_map_init(&substitutions_map, 0, rcutils_allocator);
if (rcutils_ret != RCUTILS_RET_OK) { if (rcutils_ret != RCUTILS_RET_OK) {
RCL_SET_ERROR_MSG(rcutils_get_error_string().str); RCL_SET_ERROR_MSG(rcutils_get_error_string().str);
if (rcutils_ret == RCUTILS_RET_BAD_ALLOC) { if (RCUTILS_RET_BAD_ALLOC == rcutils_ret) {
return RCL_RET_BAD_ALLOC; return RCL_RET_BAD_ALLOC;
} }
return RCL_RET_ERROR; return RCL_RET_ERROR;
@ -91,7 +91,7 @@ rcl_service_init(
rcutils_ret, rcutils_ret,
rcutils_get_error_string().str); rcutils_get_error_string().str);
} }
if (ret == RCL_RET_BAD_ALLOC) { if (RCL_RET_BAD_ALLOC == ret) {
return ret; return ret;
} }
return RCL_RET_ERROR; return RCL_RET_ERROR;
@ -284,10 +284,13 @@ rcl_take_request(
RCL_CHECK_FOR_NULL_WITH_MSG(options, "Failed to get service options", return RCL_RET_ERROR); RCL_CHECK_FOR_NULL_WITH_MSG(options, "Failed to get service options", return RCL_RET_ERROR);
bool taken = false; bool taken = false;
if (rmw_take_request( rmw_ret_t ret = rmw_take_request(
service->impl->rmw_handle, request_header, ros_request, &taken) != RMW_RET_OK) service->impl->rmw_handle, request_header, ros_request, &taken);
{ if (RMW_RET_OK != ret) {
RCL_SET_ERROR_MSG(rmw_get_error_string().str); RCL_SET_ERROR_MSG(rmw_get_error_string().str);
if (RMW_RET_BAD_ALLOC == ret) {
return RCL_RET_BAD_ALLOC;
}
return RCL_RET_ERROR; return RCL_RET_ERROR;
} }
RCUTILS_LOG_DEBUG_NAMED( RCUTILS_LOG_DEBUG_NAMED(

View file

@ -74,7 +74,7 @@ rcl_subscription_init(
rcutils_ret_t rcutils_ret = rcutils_string_map_init(&substitutions_map, 0, rcutils_allocator); rcutils_ret_t rcutils_ret = rcutils_string_map_init(&substitutions_map, 0, rcutils_allocator);
if (rcutils_ret != RCUTILS_RET_OK) { if (rcutils_ret != RCUTILS_RET_OK) {
RCL_SET_ERROR_MSG(rcutils_get_error_string().str); RCL_SET_ERROR_MSG(rcutils_get_error_string().str);
if (rcutils_ret == RCUTILS_RET_BAD_ALLOC) { if (RCUTILS_RET_BAD_ALLOC == rcutils_ret) {
return RCL_RET_BAD_ALLOC; return RCL_RET_BAD_ALLOC;
} }
return RCL_RET_ERROR; return RCL_RET_ERROR;
@ -89,7 +89,7 @@ rcl_subscription_init(
rcutils_ret, rcutils_ret,
rcutils_get_error_string().str); rcutils_get_error_string().str);
} }
if (ret == RCL_RET_BAD_ALLOC) { if (RCL_RET_BAD_ALLOC == ret) {
return ret; return ret;
} }
return RCL_RET_ERROR; return RCL_RET_ERROR;
@ -251,6 +251,9 @@ rcl_take(
rmw_take_with_info(subscription->impl->rmw_handle, ros_message, &taken, message_info_local); rmw_take_with_info(subscription->impl->rmw_handle, ros_message, &taken, message_info_local);
if (ret != RMW_RET_OK) { if (ret != RMW_RET_OK) {
RCL_SET_ERROR_MSG(rmw_get_error_string().str); RCL_SET_ERROR_MSG(rmw_get_error_string().str);
if (RMW_RET_BAD_ALLOC == ret) {
return RCL_RET_BAD_ALLOC;
}
return RCL_RET_ERROR; return RCL_RET_ERROR;
} }
RCUTILS_LOG_DEBUG_NAMED( RCUTILS_LOG_DEBUG_NAMED(
@ -281,7 +284,7 @@ rcl_take_serialized_message(
subscription->impl->rmw_handle, serialized_message, &taken, message_info_local); subscription->impl->rmw_handle, serialized_message, &taken, message_info_local);
if (ret != RMW_RET_OK) { if (ret != RMW_RET_OK) {
RCL_SET_ERROR_MSG(rmw_get_error_string().str); RCL_SET_ERROR_MSG(rmw_get_error_string().str);
if (ret == RMW_RET_BAD_ALLOC) { if (RMW_RET_BAD_ALLOC == ret) {
return RCL_RET_BAD_ALLOC; return RCL_RET_BAD_ALLOC;
} }
return RCL_RET_ERROR; return RCL_RET_ERROR;