ros2 / ros2/rclcpp

Timer in MultiThreadedExecutor crashes

Open
#2,455 16 comments 0 reactions 1 assignee View on GitHub

@mjcarroll is already working on this.

Since Mar 28, 2024.

Dominant language
C++
Stars
805
Forks
564
Avg merge
1d 17h
Merged PRs (30d)
27

Description

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

timer_test.zip

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.