rmw_node_t * rmw_create_node( rmw_context_t * context, const char * name, const char * namespace_, size_t domain_id, const rmw_node_security_options_t * security_options) { RCUTILS_CHECK_ARGUMENT_FOR_NULL(context, NULL); RMW_CHECK_TYPE_IDENTIFIERS_MATCH( init context, context->implementation_identifier, eprosima_fastrtps_identifier, // TODO(wjwwood): replace this with RMW_RET_INCORRECT_RMW_IMPLEMENTATION when refactored return NULL); return rmw_fastrtps_shared_cpp::__rmw_create_node( eprosima_fastrtps_identifier, name, namespace_, domain_id, security_options); }
rmw_wait_set_t * create_wait_set( const char * implementation_identifier, rmw_context_t * context, size_t max_conditions) { RCUTILS_CHECK_ARGUMENT_FOR_NULL(context, NULL); RMW_CHECK_TYPE_IDENTIFIERS_MATCH( init context, context->implementation_identifier, implementation_identifier, // TODO(wjwwood): replace this with RMW_RET_INCORRECT_RMW_IMPLEMENTATION when refactored return nullptr); rmw_wait_set_t * wait_set = rmw_wait_set_allocate(); ConnextWaitSetInfo * wait_set_info = nullptr; // From here onward, error results in unrolling in the goto fail block. if (!wait_set) { RMW_SET_ERROR_MSG("failed to allocate wait set"); goto fail; } wait_set->implementation_identifier = implementation_identifier; wait_set->data = rmw_allocate(sizeof(ConnextWaitSetInfo)); wait_set_info = static_cast<ConnextWaitSetInfo *>(wait_set->data); if (!wait_set_info) { RMW_SET_ERROR_MSG("failed to allocate wait set"); goto fail; } wait_set_info->wait_set = static_cast<DDS::WaitSet *>(rmw_allocate(sizeof(DDS::WaitSet))); if (!wait_set_info->wait_set) { RMW_SET_ERROR_MSG("failed to allocate wait set"); goto fail; } RMW_TRY_PLACEMENT_NEW( wait_set_info->wait_set, wait_set_info->wait_set, goto fail, DDS::WaitSet, ) // Now allocate storage for the ConditionSeq objects wait_set_info->active_conditions = static_cast<DDS::ConditionSeq *>(rmw_allocate(sizeof(DDS::ConditionSeq))); if (!wait_set_info->active_conditions) { RMW_SET_ERROR_MSG("failed to allocate active_conditions sequence"); goto fail; } wait_set_info->attached_conditions = static_cast<DDS::ConditionSeq *>(rmw_allocate(sizeof(DDS::ConditionSeq))); if (!wait_set_info->attached_conditions) { RMW_SET_ERROR_MSG("failed to allocate attached_conditions sequence"); goto fail; } // If max_conditions is greater than zero, re-allocate both ConditionSeqs to max_conditions if (max_conditions > 0) { RMW_TRY_PLACEMENT_NEW( wait_set_info->active_conditions, wait_set_info->active_conditions, goto fail, DDS::ConditionSeq, static_cast<DDS::Long>(max_conditions)) RMW_TRY_PLACEMENT_NEW( wait_set_info->attached_conditions, wait_set_info->attached_conditions, goto fail, DDS::ConditionSeq, static_cast<DDS::Long>(max_conditions)) } else {