rclcpp: Timer in MultiThreadedExecutor crashes
Platform: Ubuntu 22.04 - Iron Irwini compiled from source.
I’ve just vcs pulled, rebuilt and re-tested everything.
I built a very simple rclcpp component with a timer spinning at 200 Hz, publishing an empty Imu message. When loading the component in a component_container_mt, in a few seconds this is what happens (see below backtrace).
Seems that something wrong happens during allocation/deallocation of some resources. I attach the .zip file with demo package for debug purposes.
Thread 19 "component_conta" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffe95fa640 (LWP 848599)]
0x00007ffff7c616cc in ?? () from /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
(gdb) bt
#0 0x00007ffff7c616cc in ?? () from /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
#1 0x00007ffff7c29c3e in ?? () from /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
#2 0x00007ffff7c8c98c in ?? () from /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
#3 0x00007ffff7c8e3a1 in ?? () from /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
#4 0x00007ffff7581e99 in __gnu_cxx::new_allocator<void*>::deallocate(void**, unsigned long) ()
from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#5 0x00007ffff758020b in std::allocator_traits<std::allocator<void*> >::deallocate(std::allocator<void*>&, void**, unsigned long) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#6 0x00007ffff757e2bc in void* rclcpp::allocator::retyped_reallocate<void*, std::allocator<void*> >(void*, unsigned long, void*) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#7 0x00007ffff79ed8eb in rcl_wait_set_resize () from /home/user/ros2_iron/install/rcl/lib/librcl.so
#8 0x00007ffff750d27c in rclcpp::Executor::wait_for_work(std::chrono::duration<long, std::ratio<1l, 1000000000l> >) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#9 0x00007ffff750e0c6 in rclcpp::Executor::get_next_executable(rclcpp::AnyExecutable&, std::chrono::duration<long, std::ratio<1l, 1000000000l> >) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#10 0x00007ffff7536b25 in rclcpp::executors::MultiThreadedExecutor::run(unsigned long) ()
from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#11 0x00007ffff7538c4d in void std::__invoke_impl<void, void (rclcpp::executors::MultiThreadedExecutor::*&)(unsigned long), rclcpp::executors::MultiThreadedExecutor*&, unsigned long&>(std::__invoke_memfun_deref, void (rclcpp::executors::MultiThreadedExecutor::*&)(unsigned long), rclcpp::executors::MultiThreadedExecutor*&, unsigned long&) ()
from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#12 0x00007ffff7538b5f in std::__invoke_result<void (rclcpp::executors::MultiThreadedExecutor::*&)(unsigned long), rclcpp::executors::MultiThreadedExecutor*&, unsigned long&>::type std::__invoke<void (rclcpp::executors::MultiThreadedExecutor::*&)(unsigned long), rclcpp::executors::MultiThreadedExecutor*&, unsigned long&>(void (rclcpp::executors::MultiThreadedExecutor::*&)(unsigned long), rclcpp::executors::MultiThreadedExecutor*&, unsigned long&) ()
from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#13 0x00007ffff7538a68 in void std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>::__call<void, , 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#14 0x00007ffff75389ab in void std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>::operator()<, void>() ()
from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#15 0x00007ffff7538952 in void std::__invoke_impl<void, std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>>(std::__invoke_other, std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>&&) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#16 0x00007ffff75388fb in std::__invoke_result<std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>>::type std::__invoke<std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>>(std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>&&) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#17 0x00007ffff753889c in void std::thread::_Invoker<std::tuple<std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)> > >::_M_invoke<0ul>(std::_Index_tuple<0ul>) () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#18 0x00007ffff753886c in std::thread::_Invoker<std::tuple<std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)> > >::operator()() ()
from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#19 0x00007ffff753884c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)> > > >::_M_run() () from /home/user/ros2_iron/install/rclcpp/lib/librclcpp.so
#20 0x00007ffff66e6793 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#21 0x00007ffff6294ac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#22 0x00007ffff6326660 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
About this issue
- Original URL
- State: open
- Created 3 months ago
- Comments: 16 (8 by maintainers)
ROS doesn’t depend on
jemalloc, nor uses it. This comes from your system configurationHi, I believe the crash is related to memory deallocation. To address this, you can use AddressSanitizer by following these steps:
Rebuild your application with the following command:
Run your application and examine the error messages produced by the sanitizer for further insights.