Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 40 additions & 22 deletions rcl/src/rcl/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,6 @@ rcl_publisher_event_init(
RCL_CHECK_ARGUMENT_FOR_NULL(publisher, RCL_RET_INVALID_ARGUMENT);
rcl_allocator_t * allocator = &publisher->impl->options.allocator;
RCL_CHECK_ALLOCATOR_WITH_MSG(allocator, "invalid allocator", return RCL_RET_INVALID_ARGUMENT);

// Allocate space for the implementation struct.
event->impl = (rcl_event_impl_t *) allocator->allocate(
sizeof(rcl_event_impl_t), allocator->state);
RCL_CHECK_FOR_NULL_WITH_MSG(
event->impl, "allocating memory failed", ret = RCL_RET_BAD_ALLOC; return ret);

event->impl->rmw_handle = rmw_get_zero_initialized_event();
event->impl->allocator = *allocator;

rmw_event_type_t rmw_event_type = RMW_EVENT_INVALID;
switch (event_type) {
case RCL_PUBLISHER_OFFERED_DEADLINE_MISSED:
Expand All @@ -79,10 +69,29 @@ rcl_publisher_event_init(
RCL_SET_ERROR_MSG("Event type for publisher not supported");
return RCL_RET_INVALID_ARGUMENT;
}
return rmw_publisher_event_init(

// Allocate space for the implementation struct.
event->impl = (rcl_event_impl_t *) allocator->allocate(
sizeof(rcl_event_impl_t), allocator->state);
RCL_CHECK_FOR_NULL_WITH_MSG(
event->impl, "allocating memory failed", ret = RCL_RET_BAD_ALLOC; return ret);

event->impl->rmw_handle = rmw_get_zero_initialized_event();
event->impl->allocator = *allocator;

ret = rmw_publisher_event_init(
&event->impl->rmw_handle,
publisher->impl->rmw_handle,
rmw_event_type);
if (ret != RMW_RET_OK) {
goto fail;
}

return RCL_RET_OK;
fail:
allocator->deallocate(event->impl, allocator->state);
event->impl = NULL;
return ret;
}

rcl_ret_t
Expand All @@ -97,16 +106,6 @@ rcl_subscription_event_init(
RCL_CHECK_ARGUMENT_FOR_NULL(subscription, RCL_RET_INVALID_ARGUMENT);
rcl_allocator_t * allocator = &subscription->impl->options.allocator;
RCL_CHECK_ALLOCATOR_WITH_MSG(allocator, "invalid allocator", return RCL_RET_INVALID_ARGUMENT);

// Allocate space for the implementation struct.
event->impl = (rcl_event_impl_t *) allocator->allocate(
sizeof(rcl_event_impl_t), allocator->state);
RCL_CHECK_FOR_NULL_WITH_MSG(
event->impl, "allocating memory failed", ret = RCL_RET_BAD_ALLOC; return ret);

event->impl->rmw_handle = rmw_get_zero_initialized_event();
event->impl->allocator = *allocator;

rmw_event_type_t rmw_event_type = RMW_EVENT_INVALID;
switch (event_type) {
case RCL_SUBSCRIPTION_REQUESTED_DEADLINE_MISSED:
Expand All @@ -125,10 +124,29 @@ rcl_subscription_event_init(
RCL_SET_ERROR_MSG("Event type for subscription not supported");
return RCL_RET_INVALID_ARGUMENT;
}
return rmw_subscription_event_init(

// Allocate space for the implementation struct.
event->impl = (rcl_event_impl_t *) allocator->allocate(
sizeof(rcl_event_impl_t), allocator->state);
RCL_CHECK_FOR_NULL_WITH_MSG(
event->impl, "allocating memory failed", ret = RCL_RET_BAD_ALLOC; return ret);

event->impl->rmw_handle = rmw_get_zero_initialized_event();
event->impl->allocator = *allocator;

ret = rmw_subscription_event_init(
&event->impl->rmw_handle,
subscription->impl->rmw_handle,
rmw_event_type);
if (ret != RMW_RET_OK) {
goto fail;
}

return RCL_RET_OK;
fail:
allocator->deallocate(event->impl, allocator->state);
event->impl = NULL;
return ret;
}

rcl_ret_t
Expand Down