Skip to content

Fix memory leaks #213

Closed
Closed
@Nizerlak

Description

@Nizerlak

Recently I've run lib unit tests with valgrind for my PR purposes and I've come across some memory leaks in rclrs lib. Here is full report:

==5444== 
==5444== HEAP SUMMARY:
==5444==     in use at exit: 43,376 bytes in 77 blocks
==5444==   total heap usage: 86,438 allocs, 86,361 frees, 22,290,504 bytes allocated
==5444== 
==5444== 64 bytes in 1 blocks are still reachable in loss record 1 of 20
==5444==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x70B8C26: rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_cpp.so)
==5444==    by 0x63DA8E1: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D8F4D: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D960F: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63E37CB: rmw_create_node (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x48649C7: rcl_node_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x141245: rclrs::node::builder::NodeBuilder::build (builder.rs:257)
==5444==    by 0x1665EB: rclrs::create_node (lib.rs:97)
==5444==    by 0x1586A9: rclrs::node::subscription::tests::test_instantiate_subscriber (subscription.rs:219)
==5444==    by 0x15EED0: rclrs::node::subscription::tests::test_instantiate_subscriber::{{closure}} (subscription.rs:216)
==5444==    by 0x13C40D: core::ops::function::FnOnce::call_once (function.rs:227)
==5444== 
==5444== 64 bytes in 1 blocks are still reachable in loss record 2 of 20
==5444==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x4D19A61: rosidl_message_type_support_t const* rosidl_typesupport_c::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_c.so)
==5444==    by 0x63EAE77: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63E9DE1: rmw_create_subscription (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x486B3FE: rcl_subscription_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x148800: rclrs::node::subscription::Subscription<T>::new (subscription.rs:106)
==5444==    by 0x16544A: rclrs::node::Node::create_subscription (node.rs:206)
==5444==    by 0x168360: rclrs::node::tests::test_create_subscription (node.rs:309)
==5444==    by 0x1335E0: rclrs::node::tests::test_create_subscription::{{closure}} (node.rs:305)
==5444==    by 0x13C4ED: core::ops::function::FnOnce::call_once (function.rs:227)
==5444==    by 0x1A8302: call_once<fn(), ()> (function.rs:227)
==5444==    by 0x1A8302: test::__rust_begin_short_backtrace (lib.rs:574)
==5444==    by 0x1A7068: call_once<(), (dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global> (boxed.rs:1861)
==5444==    by 0x1A7068: call_once<(), alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>> (unwind_safe.rs:271)
==5444==    by 0x1A7068: do_call<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panicking.rs:492)
==5444==    by 0x1A7068: try<(), core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>> (panicking.rs:456)
==5444==    by 0x1A7068: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panic.rs:137)
==5444==    by 0x1A7068: run_test_in_process (lib.rs:597)
==5444==    by 0x1A7068: test::run_test::run_test_inner::{{closure}} (lib.rs:491)
==5444== 
==5444== 64 bytes in 1 blocks are still reachable in loss record 3 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x489F37C: rcutils_strndup (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x489E340: rcutils_load_shared_library (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x4D24D34: rcpputils::SharedLibrary::SharedLibrary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/ros/foxy/lib/librcpputils.so)
==5444==    by 0x4D19A6F: rosidl_message_type_support_t const* rosidl_typesupport_c::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_c.so)
==5444==    by 0x63EAE77: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63E9DE1: rmw_create_subscription (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x486B3FE: rcl_subscription_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x148800: rclrs::node::subscription::Subscription<T>::new (subscription.rs:106)
==5444==    by 0x16544A: rclrs::node::Node::create_subscription (node.rs:206)
==5444==    by 0x168360: rclrs::node::tests::test_create_subscription (node.rs:309)
==5444==    by 0x1335E0: rclrs::node::tests::test_create_subscription::{{closure}} (node.rs:305)
==5444== 
==5444== 64 bytes in 1 blocks are still reachable in loss record 4 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x401677C: resize_scopes (dl-open.c:282)
==5444==    by 0x401677C: dl_open_worker (dl-open.c:693)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444==    by 0x4AB6B58: _dlerror_run (dlerror.c:170)
==5444==    by 0x4AB63D9: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==5444==    by 0x489E35E: rcutils_load_shared_library (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x4D24D34: rcpputils::SharedLibrary::SharedLibrary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/ros/foxy/lib/librcpputils.so)
==5444==    by 0x4D19A6F: rosidl_message_type_support_t const* rosidl_typesupport_c::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_c.so)
==5444== 
==5444== 72 bytes in 1 blocks are still reachable in loss record 5 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x489FFF2: rcutils_string_map_init (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x489BF1A: rcutils_logging_initialize_with_allocator (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x489C23C: rcutils_logging_initialize (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x48602BC: rcl_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x1592CD: rclrs::context::Context::new (context.rs:89)
==5444==    by 0x158669: rclrs::node::subscription::tests::test_instantiate_subscriber (subscription.rs:218)
==5444==    by 0x15EED0: rclrs::node::subscription::tests::test_instantiate_subscriber::{{closure}} (subscription.rs:216)
==5444==    by 0x13C40D: core::ops::function::FnOnce::call_once (function.rs:227)
==5444==    by 0x1A8302: call_once<fn(), ()> (function.rs:227)
==5444==    by 0x1A8302: test::__rust_begin_short_backtrace (lib.rs:574)
==5444==    by 0x1A7068: call_once<(), (dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global> (boxed.rs:1861)
==5444==    by 0x1A7068: call_once<(), alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>> (unwind_safe.rs:271)
==5444==    by 0x1A7068: do_call<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panicking.rs:492)
==5444==    by 0x1A7068: try<(), core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>> (panicking.rs:456)
==5444==    by 0x1A7068: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panic.rs:137)
==5444==    by 0x1A7068: run_test_in_process (lib.rs:597)
==5444==    by 0x1A7068: test::run_test::run_test_inner::{{closure}} (lib.rs:491)
==5444==    by 0x17321D: {closure#1} (lib.rs:518)
==5444==    by 0x17321D: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:122)
==5444== 
==5444== 72 bytes in 1 blocks are still reachable in loss record 6 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x489F37C: rcutils_strndup (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x489E340: rcutils_load_shared_library (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x4D24D34: rcpputils::SharedLibrary::SharedLibrary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/ros/foxy/lib/librcpputils.so)
==5444==    by 0x70B8C34: rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_cpp.so)
==5444==    by 0x63DA8E1: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D8F4D: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D960F: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63E37CB: rmw_create_node (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x48649C7: rcl_node_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x141245: rclrs::node::builder::NodeBuilder::build (builder.rs:257)
==5444==    by 0x1665EB: rclrs::create_node (lib.rs:97)
==5444== 
==5444== 88 bytes in 1 blocks are still reachable in loss record 7 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x400CDCE: add_dependency (dl-lookup.c:754)
==5444==    by 0x400CDCE: _dl_lookup_symbol_x (dl-lookup.c:935)
==5444==    by 0x4011196: _dl_fixup (dl-runtime.c:112)
==5444==    by 0x4018B7D: _dl_runtime_resolve_xsave (dl-trampoline.h:126)
==5444==    by 0x1F065EDF: ???
==5444== 
==5444== 136 (64 direct, 72 indirect) bytes in 1 blocks are definitely lost in loss record 8 of 20
==5444==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x70B8C26: rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_cpp.so)
==5444==    by 0x63DA8E1: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D8F4D: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D960F: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63E37CB: rmw_create_node (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x48649C7: rcl_node_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x141245: rclrs::node::builder::NodeBuilder::build (builder.rs:257)
==5444==    by 0x1665EB: rclrs::create_node (lib.rs:97)
==5444==    by 0x124D91: rclrs::node::publisher::tests::create_fixture (publisher.rs:176)
==5444==    by 0x1250F5: rclrs::node::publisher::tests::test_publish_message (publisher.rs:191)
==5444==    by 0x141E30: rclrs::node::publisher::tests::test_publish_message::{{closure}} (publisher.rs:190)
==5444== 
==5444== 136 (64 direct, 72 indirect) bytes in 1 blocks are definitely lost in loss record 9 of 20
==5444==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x70B8C26: rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_cpp.so)
==5444==    by 0x63DA8E1: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D8F4D: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D960F: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63E37CB: rmw_create_node (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x48649C7: rcl_node_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x141245: rclrs::node::builder::NodeBuilder::build (builder.rs:257)
==5444==    by 0x1665EB: rclrs::create_node (lib.rs:97)
==5444==    by 0x168209: rclrs::node::tests::test_create_subscription (node.rs:308)
==5444==    by 0x1335E0: rclrs::node::tests::test_create_subscription::{{closure}} (node.rs:305)
==5444==    by 0x13C4ED: core::ops::function::FnOnce::call_once (function.rs:227)
==5444== 
==5444== 144 bytes in 2 blocks are indirectly lost in loss record 10 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x489F37C: rcutils_strndup (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x489E340: rcutils_load_shared_library (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x4D24D34: rcpputils::SharedLibrary::SharedLibrary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/ros/foxy/lib/librcpputils.so)
==5444==    by 0x70B8C34: rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_typesupport_handle_function<rosidl_message_type_support_t>(rosidl_message_type_support_t const*, char const*) (in /opt/ros/foxy/lib/librosidl_typesupport_cpp.so)
==5444==    by 0x63DA8E1: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D8F4D: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63D960F: ??? (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x63E37CB: rmw_create_node (in /opt/ros/foxy/lib/librmw_fastrtps_cpp.so)
==5444==    by 0x48649C7: rcl_node_init (in /opt/ros/foxy/lib/librcl.so)
==5444==    by 0x141245: rclrs::node::builder::NodeBuilder::build (builder.rs:257)
==5444==    by 0x1665EB: rclrs::create_node (lib.rs:97)
==5444== 
==5444== 159 bytes in 4 blocks are still reachable in loss record 11 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x401F5DE: strdup (strdup.c:42)
==5444==    by 0x4019A91: _dl_load_cache_lookup (dl-cache.c:338)
==5444==    by 0x400A989: _dl_map_object (dl-load.c:2102)
==5444==    by 0x400F514: openaux (dl-deps.c:64)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x400F962: _dl_map_object_deps (dl-deps.c:248)
==5444==    by 0x4015DAF: dl_open_worker (dl-open.c:571)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444== 
==5444== 176 bytes in 2 blocks are still reachable in loss record 12 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x400CDCE: add_dependency (dl-lookup.c:754)
==5444==    by 0x400CDCE: _dl_lookup_symbol_x (dl-lookup.c:935)
==5444==    by 0x400DF23: elf_machine_rela (dl-machine.h:308)
==5444==    by 0x400DF23: elf_dynamic_do_Rela (do-rel.h:137)
==5444==    by 0x400DF23: _dl_relocate_object (dl-reloc.c:255)
==5444==    by 0x4015F6B: dl_open_worker (dl-open.c:688)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444==    by 0x4AB6B58: _dlerror_run (dlerror.c:170)
==5444==    by 0x4AB63D9: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==5444==    by 0x489E35E: rcutils_load_shared_library (in /opt/ros/foxy/lib/librcutils.so)
==5444== 
==5444== 177 bytes in 3 blocks are still reachable in loss record 13 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x401F5DE: strdup (strdup.c:42)
==5444==    by 0x400A5A9: _dl_map_object (dl-load.c:2168)
==5444==    by 0x4015D46: dl_open_worker (dl-open.c:513)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444==    by 0x4AB6B58: _dlerror_run (dlerror.c:170)
==5444==    by 0x4AB63D9: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==5444==    by 0x489E35E: rcutils_load_shared_library (in /opt/ros/foxy/lib/librcutils.so)
==5444== 
==5444== 177 bytes in 3 blocks are still reachable in loss record 14 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x400D5B7: _dl_new_object (dl-object.c:196)
==5444==    by 0x4006E96: _dl_map_object_from_fd (dl-load.c:997)
==5444==    by 0x400A61A: _dl_map_object (dl-load.c:2236)
==5444==    by 0x4015D46: dl_open_worker (dl-open.c:513)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444==    by 0x4AB6B58: _dlerror_run (dlerror.c:170)
==5444==    by 0x4AB63D9: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==5444== 
==5444== 450 bytes in 9 blocks are still reachable in loss record 15 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x4008C82: open_path (dl-load.c:1882)
==5444==    by 0x400A7A2: _dl_map_object (dl-load.c:2067)
==5444==    by 0x400F514: openaux (dl-deps.c:64)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x400F962: _dl_map_object_deps (dl-deps.c:248)
==5444==    by 0x4015DAF: dl_open_worker (dl-open.c:571)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444== 
==5444== 609 bytes in 13 blocks are still reachable in loss record 16 of 20
==5444==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x400D5B7: _dl_new_object (dl-object.c:196)
==5444==    by 0x4006E96: _dl_map_object_from_fd (dl-load.c:997)
==5444==    by 0x400A61A: _dl_map_object (dl-load.c:2236)
==5444==    by 0x400F514: openaux (dl-deps.c:64)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x400F962: _dl_map_object_deps (dl-deps.c:248)
==5444==    by 0x4015DAF: dl_open_worker (dl-open.c:571)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444== 
==5444== 3,729 bytes in 3 blocks are still reachable in loss record 17 of 20
==5444==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x400D283: _dl_new_object (dl-object.c:89)
==5444==    by 0x4006E96: _dl_map_object_from_fd (dl-load.c:997)
==5444==    by 0x400A61A: _dl_map_object (dl-load.c:2236)
==5444==    by 0x4015D46: dl_open_worker (dl-open.c:513)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444==    by 0x4AB6B58: _dlerror_run (dlerror.c:170)
==5444==    by 0x4AB63D9: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==5444== 
==5444== 5,112 bytes in 15 blocks are still reachable in loss record 18 of 20
==5444==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x401331C: _dl_check_map_versions (dl-version.c:274)
==5444==    by 0x40160FC: dl_open_worker (dl-open.c:577)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444==    by 0x4AB6B58: _dlerror_run (dlerror.c:170)
==5444==    by 0x4AB63D9: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==5444==    by 0x489E35E: rcutils_load_shared_library (in /opt/ros/foxy/lib/librcutils.so)
==5444==    by 0x4D24D34: rcpputils::SharedLibrary::SharedLibrary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (in /opt/ros/foxy/lib/librcpputils.so)
==5444== 
==5444== 15,739 bytes in 13 blocks are still reachable in loss record 19 of 20
==5444==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x400D283: _dl_new_object (dl-object.c:89)
==5444==    by 0x4006E96: _dl_map_object_from_fd (dl-load.c:997)
==5444==    by 0x400A61A: _dl_map_object (dl-load.c:2236)
==5444==    by 0x400F514: openaux (dl-deps.c:64)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x400F962: _dl_map_object_deps (dl-deps.c:248)
==5444==    by 0x4015DAF: dl_open_worker (dl-open.c:571)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444== 
==5444== 16,288 bytes in 1 blocks are still reachable in loss record 20 of 20
==5444==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5444==    by 0x400BEA2: do_lookup_unique (dl-lookup.c:276)
==5444==    by 0x400BEA2: do_lookup_x (dl-lookup.c:557)
==5444==    by 0x400C1F0: _dl_lookup_symbol_x (dl-lookup.c:861)
==5444==    by 0x400DF23: elf_machine_rela (dl-machine.h:308)
==5444==    by 0x400DF23: elf_dynamic_do_Rela (do-rel.h:137)
==5444==    by 0x400DF23: _dl_relocate_object (dl-reloc.c:255)
==5444==    by 0x4015F6B: dl_open_worker (dl-open.c:688)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4015609: _dl_open (dl-open.c:837)
==5444==    by 0x4AB634B: dlopen_doit (dlopen.c:66)
==5444==    by 0x4C1B927: _dl_catch_exception (dl-error-skeleton.c:208)
==5444==    by 0x4C1B9F2: _dl_catch_error (dl-error-skeleton.c:227)
==5444==    by 0x4AB6B58: _dlerror_run (dlerror.c:170)
==5444==    by 0x4AB63D9: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==5444== 
==5444== LEAK SUMMARY:
==5444==    definitely lost: 128 bytes in 2 blocks
==5444==    indirectly lost: 144 bytes in 2 blocks
==5444==      possibly lost: 0 bytes in 0 blocks
==5444==    still reachable: 43,104 bytes in 73 blocks
==5444==         suppressed: 0 bytes in 0 blocks
==5444== 
==5444== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
==5444== 
==5444== 1 errors in context 1 of 4:
==5444== Syscall param statx(buf) points to unaddressable byte(s)
==5444==    at 0x4BC888E: statx (statx.c:29)
==5444==    by 0x1F1EE1: statx (weak.rs:178)
==5444==    by 0x1F1EE1: std::sys::unix::fs::try_statx (fs.rs:150)
==5444==    by 0x1EE657: std::sys::unix::fs::stat (fs.rs:1255)
==5444==    by 0x19AF07: metadata<&std::path::PathBuf> (fs.rs:1633)
==5444==    by 0x19AF07: get_dbpath_for_term (searcher.rs:50)
==5444==    by 0x19AF07: from_name (mod.rs:83)
==5444==    by 0x19AF07: from_env (mod.rs:69)
==5444==    by 0x19AF07: new<std::io::stdio::Stdout> (mod.rs:159)
==5444==    by 0x19AF07: test::term::stdout (term.rs:33)
==5444==    by 0x187C23: test::console::run_tests_console (console.rs:266)
==5444==    by 0x19D226: test::test_main (lib.rs:115)
==5444==    by 0x19E200: test::test_main_static (lib.rs:134)
==5444==    by 0x166662: rclrs::main (lib.rs:1)
==5444==    by 0x13C44A: core::ops::function::FnOnce::call_once (function.rs:227)
==5444==    by 0x15A5AD: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:122)
==5444==    by 0x157EE0: std::rt::lang_start::{{closure}} (rt.rs:145)
==5444==    by 0x1E172D: call_once<(), (dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)> (function.rs:259)
==5444==    by 0x1E172D: do_call<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> (panicking.rs:492)
==5444==    by 0x1E172D: try<i32, &(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)> (panicking.rs:456)
==5444==    by 0x1E172D: catch_unwind<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> (panic.rs:137)
==5444==    by 0x1E172D: {closure#2} (rt.rs:128)
==5444==    by 0x1E172D: do_call<std::rt::lang_start_internal::{closure_env#2}, isize> (panicking.rs:492)
==5444==    by 0x1E172D: try<isize, std::rt::lang_start_internal::{closure_env#2}> (panicking.rs:456)
==5444==    by 0x1E172D: catch_unwind<std::rt::lang_start_internal::{closure_env#2}, isize> (panic.rs:137)
==5444==    by 0x1E172D: std::rt::lang_start_internal (rt.rs:128)
==5444==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==5444== 
==5444== 
==5444== 1 errors in context 2 of 4:
==5444== Syscall param statx(file_name) points to unaddressable byte(s)
==5444==    at 0x4BC888E: statx (statx.c:29)
==5444==    by 0x1F1EE1: statx (weak.rs:178)
==5444==    by 0x1F1EE1: std::sys::unix::fs::try_statx (fs.rs:150)
==5444==    by 0x1EE657: std::sys::unix::fs::stat (fs.rs:1255)
==5444==    by 0x19AF07: metadata<&std::path::PathBuf> (fs.rs:1633)
==5444==    by 0x19AF07: get_dbpath_for_term (searcher.rs:50)
==5444==    by 0x19AF07: from_name (mod.rs:83)
==5444==    by 0x19AF07: from_env (mod.rs:69)
==5444==    by 0x19AF07: new<std::io::stdio::Stdout> (mod.rs:159)
==5444==    by 0x19AF07: test::term::stdout (term.rs:33)
==5444==    by 0x187C23: test::console::run_tests_console (console.rs:266)
==5444==    by 0x19D226: test::test_main (lib.rs:115)
==5444==    by 0x19E200: test::test_main_static (lib.rs:134)
==5444==    by 0x166662: rclrs::main (lib.rs:1)
==5444==    by 0x13C44A: core::ops::function::FnOnce::call_once (function.rs:227)
==5444==    by 0x15A5AD: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:122)
==5444==    by 0x157EE0: std::rt::lang_start::{{closure}} (rt.rs:145)
==5444==    by 0x1E172D: call_once<(), (dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)> (function.rs:259)
==5444==    by 0x1E172D: do_call<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> (panicking.rs:492)
==5444==    by 0x1E172D: try<i32, &(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe)> (panicking.rs:456)
==5444==    by 0x1E172D: catch_unwind<&(dyn core::ops::function::Fn<(), Output=i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe), i32> (panic.rs:137)
==5444==    by 0x1E172D: {closure#2} (rt.rs:128)
==5444==    by 0x1E172D: do_call<std::rt::lang_start_internal::{closure_env#2}, isize> (panicking.rs:492)
==5444==    by 0x1E172D: try<isize, std::rt::lang_start_internal::{closure_env#2}> (panicking.rs:456)
==5444==    by 0x1E172D: catch_unwind<std::rt::lang_start_internal::{closure_env#2}, isize> (panic.rs:137)
==5444==    by 0x1E172D: std::rt::lang_start_internal (rt.rs:128)
==5444==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==5444== 
==5444== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)

Example places where leak occurs: context.rs, subscription.rs, node.rs.
Seems like deallocation is currently not utilized. For every rcl_init call there should be corresponding deallocate from rcl_allocator.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions