diff --git a/CMakeLists.txt b/CMakeLists.txt index 48f66ab..2ce57a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ find_package(FastRTPS 2.3 REQUIRED MODULE) add_library(${PROJECT_NAME} "src/detail/fastrtps_dynamic_data.cpp" "src/detail/fastrtps_dynamic_type.cpp" - "src/detail/fastrtps_serialization_support_impl_handle.cpp" + "src/detail/fastrtps_serialization_support.cpp" "src/detail/utils.cpp" "src/identifier.cpp" diff --git a/src/detail/fastrtps_dynamic_data.cpp b/src/detail/fastrtps_dynamic_data.cpp index b462d44..623ad3d 100644 --- a/src/detail/fastrtps_dynamic_data.cpp +++ b/src/detail/fastrtps_dynamic_data.cpp @@ -34,7 +34,7 @@ #include #include "macros.hpp" -#include "fastrtps_serialization_support_impl_handle.hpp" +#include "fastrtps_serialization_support.hpp" #include "utils.hpp" @@ -190,11 +190,13 @@ fastrtps__dynamic_data_return_loaned_value( const rosidl_dynamic_typesupport_dynamic_data_impl_t * inner_data_impl) { (void) serialization_support_impl; - FASTRTPS_CHECK_RET_FOR_NOT_OK_AND_RETURN_WITH_MSG( + FASTRTPS_CHECK_RET_FOR_NOT_OK_WITH_MSG( static_cast(data_impl->handle) ->return_loaned_value(static_cast(inner_data_impl->handle)), "Could not return loaned value" ); + delete inner_data_impl; + return RCUTILS_RET_OK; } @@ -289,15 +291,17 @@ fastrtps__dynamic_data_clone( rcutils_ret_t -fastrtps__dynamic_data_fini( +fastrtps__dynamic_data_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl, rosidl_dynamic_typesupport_dynamic_data_impl_t * data_impl) { - FASTRTPS_CHECK_RET_FOR_NOT_OK_AND_RETURN_WITH_MSG( + FASTRTPS_CHECK_RET_FOR_NOT_OK_WITH_MSG( static_cast(serialization_support_impl->handle) ->data_factory_->delete_data(static_cast(data_impl->handle)), "Could not delete data" ); + delete data_impl; + return RCUTILS_RET_OK; } diff --git a/src/detail/fastrtps_dynamic_data.hpp b/src/detail/fastrtps_dynamic_data.hpp index 94f8faa..d7bcf88 100644 --- a/src/detail/fastrtps_dynamic_data.hpp +++ b/src/detail/fastrtps_dynamic_data.hpp @@ -144,7 +144,7 @@ fastrtps__dynamic_data_clone( ROSIDL_DYNAMIC_TYPESUPPORT_FASTRTPS_PUBLIC rcutils_ret_t -fastrtps__dynamic_data_fini( +fastrtps__dynamic_data_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl, rosidl_dynamic_typesupport_dynamic_data_impl_t * data_impl); diff --git a/src/detail/fastrtps_dynamic_type.cpp b/src/detail/fastrtps_dynamic_type.cpp index 168c728..ec6b5b5 100644 --- a/src/detail/fastrtps_dynamic_type.cpp +++ b/src/detail/fastrtps_dynamic_type.cpp @@ -35,7 +35,7 @@ #include #include -#include "fastrtps_serialization_support_impl_handle.hpp" +#include "fastrtps_serialization_support.hpp" #include "macros.hpp" #include "utils.hpp" @@ -137,17 +137,19 @@ fastrtps__dynamic_type_builder_clone( rcutils_ret_t -fastrtps__dynamic_type_builder_fini( +fastrtps__dynamic_type_builder_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl, rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * type_builder_impl) { auto fastrtps_impl = static_cast( serialization_support_impl->handle); - FASTRTPS_CHECK_RET_FOR_NOT_OK_AND_RETURN_WITH_MSG( + FASTRTPS_CHECK_RET_FOR_NOT_OK_WITH_MSG( fastrtps_impl->type_factory_->delete_builder( static_cast(type_builder_impl->handle)), "Could not delete type builder" ); + delete type_builder_impl; + return RCUTILS_RET_OK; } @@ -212,7 +214,7 @@ fastrtps__dynamic_type_clone( rcutils_ret_t -fastrtps__dynamic_type_fini( +fastrtps__dynamic_type_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl, rosidl_dynamic_typesupport_dynamic_type_impl_t * type_impl) { @@ -221,9 +223,10 @@ fastrtps__dynamic_type_fini( auto type = eprosima::fastrtps::types::DynamicType_ptr( *static_cast(type_impl->handle)); - FASTRTPS_CHECK_RET_FOR_NOT_OK_AND_RETURN_WITH_MSG( + FASTRTPS_CHECK_RET_FOR_NOT_OK_WITH_MSG( fastrtps_impl->type_factory_->delete_type(type.get()), "Could not delete type" ); + delete type_impl; return RCUTILS_RET_OK; } diff --git a/src/detail/fastrtps_dynamic_type.hpp b/src/detail/fastrtps_dynamic_type.hpp index 479ec68..98b8035 100644 --- a/src/detail/fastrtps_dynamic_type.hpp +++ b/src/detail/fastrtps_dynamic_type.hpp @@ -58,7 +58,7 @@ fastrtps__dynamic_type_builder_clone( ROSIDL_DYNAMIC_TYPESUPPORT_FASTRTPS_PUBLIC rcutils_ret_t -fastrtps__dynamic_type_builder_fini( +fastrtps__dynamic_type_builder_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl, rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * type_builder_impl); @@ -78,7 +78,7 @@ fastrtps__dynamic_type_clone( ROSIDL_DYNAMIC_TYPESUPPORT_FASTRTPS_PUBLIC rcutils_ret_t -fastrtps__dynamic_type_fini( +fastrtps__dynamic_type_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl, rosidl_dynamic_typesupport_dynamic_type_impl_t * type_impl); diff --git a/src/detail/fastrtps_serialization_support_impl_handle.cpp b/src/detail/fastrtps_serialization_support.cpp similarity index 70% rename from src/detail/fastrtps_serialization_support_impl_handle.cpp rename to src/detail/fastrtps_serialization_support.cpp index 4d65693..ceb1ca5 100644 --- a/src/detail/fastrtps_serialization_support_impl_handle.cpp +++ b/src/detail/fastrtps_serialization_support.cpp @@ -16,23 +16,37 @@ #include #include -#include "fastrtps_serialization_support_impl_handle.hpp" +#include "fastrtps_serialization_support.hpp" #include "macros.hpp" rcutils_ret_t -fastrtps__serialization_support_impl_handle_fini( +fastrtps__serialization_support_impl_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl) { auto fastrtps_serialization_support_handle = static_cast( serialization_support_impl->handle); - FASTRTPS_CHECK_RET_FOR_NOT_OK_AND_RETURN_WITH_MSG( + FASTRTPS_CHECK_RET_FOR_NOT_OK_WITH_MSG( fastrtps_serialization_support_handle->type_factory_->delete_instance(), "Could not delete dynamic type factory when finalizing serialization support"); - FASTRTPS_CHECK_RET_FOR_NOT_OK_AND_RETURN_WITH_MSG( + FASTRTPS_CHECK_RET_FOR_NOT_OK_WITH_MSG( fastrtps_serialization_support_handle->data_factory_->delete_instance(), "Could not delete dynamic data factory when finalizing serialization support"); + + delete static_cast( + serialization_support_impl->handle); + delete serialization_support_impl; + return RCUTILS_RET_OK; +} + + +rcutils_ret_t +fastrtps__serialization_support_interface_destroy( + rosidl_dynamic_typesupport_serialization_support_interface_t * serialization_support_interface) +{ + delete serialization_support_interface; + return RCUTILS_RET_OK; } diff --git a/src/detail/fastrtps_serialization_support_impl_handle.hpp b/src/detail/fastrtps_serialization_support.hpp similarity index 86% rename from src/detail/fastrtps_serialization_support_impl_handle.hpp rename to src/detail/fastrtps_serialization_support.hpp index 52b1658..5ead76f 100644 --- a/src/detail/fastrtps_serialization_support_impl_handle.hpp +++ b/src/detail/fastrtps_serialization_support.hpp @@ -32,8 +32,12 @@ typedef struct fastrtps__serialization_support_impl_handle_s ROSIDL_DYNAMIC_TYPESUPPORT_FASTRTPS_PUBLIC rcutils_ret_t -fastrtps__serialization_support_impl_handle_fini( +fastrtps__serialization_support_impl_destroy( rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support_impl); +ROSIDL_DYNAMIC_TYPESUPPORT_FASTRTPS_PUBLIC +rcutils_ret_t +fastrtps__serialization_support_interface_destroy( + rosidl_dynamic_typesupport_serialization_support_interface_t * serialization_support_interface); #endif // DETAIL__FASTRTPS_SERIALIZATION_SUPPORT_IMPL_HANDLE_HPP_ diff --git a/src/serialization_support.cpp b/src/serialization_support.cpp index d6034eb..223eb66 100644 --- a/src/serialization_support.cpp +++ b/src/serialization_support.cpp @@ -16,7 +16,6 @@ #include #include -#include #include #include @@ -25,7 +24,7 @@ #include "detail/fastrtps_dynamic_data.hpp" #include "detail/fastrtps_dynamic_type.hpp" -#include "detail/fastrtps_serialization_support_impl_handle.hpp" +#include "detail/fastrtps_serialization_support.hpp" // ================================================================================================= @@ -34,19 +33,11 @@ rosidl_dynamic_typesupport_serialization_support_impl_t * rosidl_dynamic_typesupport_fastrtps_create_serialization_support_impl() { - rcutils_allocator_t allocator = rcutils_get_default_allocator(); - auto serialization_support_impl = - static_cast( - allocator.zero_allocate( - 1, sizeof(rosidl_dynamic_typesupport_serialization_support_impl_t), &allocator.state) - ); + auto serialization_support_impl = new rosidl_dynamic_typesupport_serialization_support_impl_t(); serialization_support_impl->library_identifier = fastrtps_serialization_support_library_identifier; - auto serialization_support_impl_handle = - static_cast( - allocator.zero_allocate( - 1, sizeof(fastrtps__serialization_support_impl_handle_t), &allocator.state)); + auto serialization_support_impl_handle = new fastrtps__serialization_support_impl_handle_t(); // The actual business serialization_support_impl_handle->type_factory_ = @@ -66,22 +57,22 @@ rosidl_dynamic_typesupport_fastrtps_create_serialization_support_impl() rosidl_dynamic_typesupport_serialization_support_interface_t * rosidl_dynamic_typesupport_fastrtps_create_serialization_support_interface() { - rcutils_allocator_t allocator = rcutils_get_default_allocator(); auto serialization_support_interface = - static_cast( - allocator.zero_allocate( - 1, sizeof(rosidl_dynamic_typesupport_serialization_support_interface_t), &allocator.state) - ); - + new rosidl_dynamic_typesupport_serialization_support_interface_t(); // CORE ========================================================================================== serialization_support_interface->library_identifier = fastrtps_serialization_support_library_identifier; - serialization_support_interface->serialization_support_impl_handle_fini = + serialization_support_interface->serialization_support_impl_destroy = (rcutils_ret_t (*)( rosidl_dynamic_typesupport_serialization_support_impl_t *)) - fastrtps__serialization_support_impl_handle_fini; + fastrtps__serialization_support_impl_destroy; + + serialization_support_interface->serialization_support_interface_destroy = + (rcutils_ret_t (*)( + rosidl_dynamic_typesupport_serialization_support_interface_t *)) + fastrtps__serialization_support_interface_destroy; // =============================================================================================== @@ -120,11 +111,11 @@ rosidl_dynamic_typesupport_fastrtps_create_serialization_support_interface() rosidl_dynamic_typesupport_dynamic_type_builder_impl_t **)) fastrtps__dynamic_type_builder_clone; - serialization_support_interface->dynamic_type_builder_fini = + serialization_support_interface->dynamic_type_builder_destroy = (rcutils_ret_t (*)( rosidl_dynamic_typesupport_serialization_support_impl_t *, rosidl_dynamic_typesupport_dynamic_type_builder_impl_t *)) - fastrtps__dynamic_type_builder_fini; + fastrtps__dynamic_type_builder_destroy; serialization_support_interface->dynamic_type_init_from_dynamic_type_builder = (rcutils_ret_t (*)( @@ -140,11 +131,11 @@ rosidl_dynamic_typesupport_fastrtps_create_serialization_support_interface() rosidl_dynamic_typesupport_dynamic_type_impl_t **)) fastrtps__dynamic_type_clone; - serialization_support_interface->dynamic_type_fini = + serialization_support_interface->dynamic_type_destroy = (rcutils_ret_t (*)( rosidl_dynamic_typesupport_serialization_support_impl_t *, rosidl_dynamic_typesupport_dynamic_type_impl_t *)) - fastrtps__dynamic_type_fini; + fastrtps__dynamic_type_destroy; serialization_support_interface->dynamic_type_get_name = (rcutils_ret_t (*)( @@ -692,11 +683,11 @@ rosidl_dynamic_typesupport_fastrtps_create_serialization_support_interface() rosidl_dynamic_typesupport_dynamic_data_impl_t **)) fastrtps__dynamic_data_clone; - serialization_support_interface->dynamic_data_fini = + serialization_support_interface->dynamic_data_destroy = (rcutils_ret_t (*)( rosidl_dynamic_typesupport_serialization_support_impl_t *, rosidl_dynamic_typesupport_dynamic_data_impl_t *)) - fastrtps__dynamic_data_fini; + fastrtps__dynamic_data_destroy; // DYNAMIC DATA SERIALIZATION