Skip to content

Commit

Permalink
Move dynamic type support struct to rosidl and fix mem issues
Browse files Browse the repository at this point in the history
Signed-off-by: methylDragon <methylDragon@gmail.com>
  • Loading branch information
methylDragon committed Apr 4, 2023
1 parent 1b2d7cc commit e622154
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 44 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
12 changes: 8 additions & 4 deletions src/detail/fastrtps_dynamic_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

#include <fastrtps/types/DynamicDataHelper.hpp>
#include "macros.hpp"
#include "fastrtps_serialization_support_impl_handle.hpp"
#include "fastrtps_serialization_support.hpp"
#include "utils.hpp"


Expand Down Expand Up @@ -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<DynamicData *>(data_impl->handle)
->return_loaned_value(static_cast<const DynamicData *>(inner_data_impl->handle)),
"Could not return loaned value"
);
delete inner_data_impl;
return RCUTILS_RET_OK;
}


Expand Down Expand Up @@ -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<fastrtps__serialization_support_impl_handle_t *>(serialization_support_impl->handle)
->data_factory_->delete_data(static_cast<DynamicData *>(data_impl->handle)),
"Could not delete data"
);
delete data_impl;
return RCUTILS_RET_OK;
}


Expand Down
2 changes: 1 addition & 1 deletion src/detail/fastrtps_dynamic_data.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
13 changes: 8 additions & 5 deletions src/detail/fastrtps_dynamic_type.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
#include <string>
#include <utility>

#include "fastrtps_serialization_support_impl_handle.hpp"
#include "fastrtps_serialization_support.hpp"
#include "macros.hpp"
#include "utils.hpp"

Expand Down Expand Up @@ -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<fastrtps__serialization_support_impl_handle_t *>(
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<DynamicTypeBuilder *>(type_builder_impl->handle)),
"Could not delete type builder"
);
delete type_builder_impl;
return RCUTILS_RET_OK;
}


Expand Down Expand Up @@ -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)
{
Expand All @@ -221,9 +223,10 @@ fastrtps__dynamic_type_fini(
auto type = eprosima::fastrtps::types::DynamicType_ptr(
*static_cast<const eprosima::fastrtps::types::DynamicType_ptr *>(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;
}

Expand Down
4 changes: 2 additions & 2 deletions src/detail/fastrtps_dynamic_type.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,37 @@
#include <rcutils/types/rcutils_ret.h>
#include <rosidl_dynamic_typesupport/api/serialization_support_interface.h>

#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<fastrtps__serialization_support_impl_handle_t *>(
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<fastrtps__serialization_support_impl_handle_t *>(
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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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_
43 changes: 17 additions & 26 deletions src/serialization_support.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include <rosidl_dynamic_typesupport/types.h>

#include <rcutils/types/uint8_array.h>
#include <rcutils/allocator.h>
#include <rosidl_dynamic_typesupport_fastrtps/identifier.h>
#include <rosidl_dynamic_typesupport_fastrtps/serialization_support.h>

Expand All @@ -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"


// =================================================================================================
Expand All @@ -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<rosidl_dynamic_typesupport_serialization_support_impl_t *>(
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<fastrtps__serialization_support_impl_handle_t *>(
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_ =
Expand All @@ -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<rosidl_dynamic_typesupport_serialization_support_interface_t *>(
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;


// ===============================================================================================
Expand Down Expand Up @@ -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 (*)(
Expand All @@ -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 (*)(
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit e622154

Please sign in to comment.