Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_node is flaky #1169

Closed
jacobperron opened this issue Sep 23, 2020 · 5 comments
Closed

test_node is flaky #1169

jacobperron opened this issue Sep 23, 2020 · 5 comments
Assignees

Comments

@jacobperron
Copy link
Collaborator

I first noticed the test failing here: https://build.osrfoundation.org/job/ros2_gazebo_pkgs-ci-default_rolling-focal-amd64/5/

Locally, I can reproduce if I run the test standalone (not with colcon test). I think the lack of stress is uncovering some sort of race in the test:

$ ./build/gazebo_ros/test/test_node
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from TestNode
[ RUN      ] TestNode.StaticNode
[INFO] [1600895033.746531687] [gazebo_ros_node]: ROS was initialized without arguments.
[       OK ] TestNode.StaticNode (58 ms)
[ RUN      ] TestNode.GetSdf
Warning [parser.cc:636] Converting a deprecated SDF source[data-string].
[INFO] [1600895033.852026918] [gazebo_ros_node]: ROS was initialized without arguments.
[       OK ] TestNode.GetSdf (122 ms)
[ RUN      ] TestNode.RemapAndQoSOverride
Warning [parser.cc:636] Converting a deprecated SDF source[data-string].
[INFO] [1600895033.976637521] [gazebo_ros_node]: ROS was initialized without arguments.
terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
  what():  could not create subscription: rcl node's context is invalid, at /tmp/binarydeb/ros-rolling-rcl-2.2.0/src/rcl/node.c:426
[1]    331222 abort (core dumped)
Backtrace
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007f6992d7d859 in __GI_abort () at abort.c:79
#2  0x00007f6993152951 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007f699315e47c in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007f699315e4e7 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007f699315e46f in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007f69935af6ed in rclcpp::exceptions::throw_from_rcl_error(int, std::__cxx11::basic_string, std::allocator > const&, rcutils_error_state_t const*, void (*)()) () at /opt/ros/rolling/lib/librclcpp.so
#7  0x00007f699363c7a6 in rclcpp::SubscriptionBase::SubscriptionBase(rclcpp::node_interfaces::NodeBaseInterface*, rosidl_message_type_support_t const&, std::__cxx11::basic_string, std::allocator > const&, rcl_subscription_options_t const&, bool) () at /opt/ros/rolling/lib/librclcpp.so
#8  0x00007f699365f8ed in rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >::Subscription(rclcpp::node_interfaces::NodeBaseInterface*, rosidl_message_type_support_t const&, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback >, std::allocator >, rclcpp::SubscriptionOptionsWithAllocator > const&, std::shared_ptr >, std::allocator > >, std::shared_ptr > > >) () at /opt/ros/rolling/lib/librclcpp.so
#9  0x00007f6993660764 in rclcpp::create_subscription_factory >, std::_Bind))(std::shared_ptr > >)>, std::allocator, rosgraph_msgs::msg::Clock_ >, rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >(std::_Bind))(std::shared_ptr > >)>&&, rclcpp::SubscriptionOptionsWithAllocator > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >::SharedPtr, std::shared_ptr > > >)::{lambda(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&)#1}::operator()(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&) const () at /opt/ros/rolling/lib/librclcpp.so
#10 0x00007f6993660948 in std::_Function_handler (rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&), rclcpp::create_subscription_factory >, std::_Bind))(std::shared_ptr > >)>, std::allocator, rosgraph_msgs::msg::Clock_ >, rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >(std::_Bind))(std::shared_ptr > >)>&&, rclcpp::SubscriptionOptionsWithAllocator > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >::SharedPtr, std::shared_ptr > > >)::{lambda(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&)#1}>::_M_invoke(std::_Any_data const&, rclcpp::node_interfaces::NodeBaseInterface*&&, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&) () at /opt/ros/rolling/lib/librclcpp.so
#11 0x00007f699360182b in rclcpp::node_interfaces::NodeTopics::create_subscription(std::__cxx11::basic_string, std::allocator > const&, rclcpp::SubscriptionFactory const&, rclcpp::QoS const&) () at /opt/ros/rolling/lib/librclcpp.so
#12 0x00007f699365d479 in std::shared_ptr >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > > > rclcpp::create_subscription >, std::_Bind))(std::shared_ptr > >)>, std::allocator, rosgraph_msgs::msg::Clock_ >, rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >, std::shared_ptr&>(std::shared_ptr&, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&, std::_Bind))(std::shared_ptr > >)>&&, rclcpp::SubscriptionOptionsWithAllocator > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >::SharedPtr) () at /opt/ros/rolling/lib/librclcpp.so
#13 0x00007f699363ecb6 in rclcpp::TimeSource::create_clock_sub() () at /opt/ros/rolling/lib/librclcpp.so
#14 0x00007f6993641638 in rclcpp::TimeSource::on_parameter_event(std::shared_ptr > >) () at /opt/ros/rolling/lib/librclcpp.so
#15 0x00007f69936495c8 in std::_Function_handler > >), std::_Bind))(std::shared_ptr > >)> >::_M_invoke(std::_Any_data const&, std::shared_ptr > >&&) () at /opt/ros/rolling/lib/librclcpp.so
#16 0x00007f69936594a1 in rclcpp::AnySubscriptionCallback >, std::allocator >::dispatch(std::shared_ptr > >, rclcpp::MessageInfo const&) ()
    at /opt/ros/rolling/lib/librclcpp.so
#17 0x00007f699365af6f in rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >::handle_message(std::shared_ptr&, rclcpp::MessageInfo const&) () at /opt/ros/rolling/lib/librclcpp.so
#18 0x00007f69935b3d1c in  () at /opt/ros/rolling/lib/librclcpp.so
#19 0x00007f69935b45db in rclcpp::Executor::execute_subscription(std::shared_ptr) () at /opt/ros/rolling/lib/librclcpp.so
#20 0x00007f69935b4d9a in rclcpp::Executor::execute_any_executable(rclcpp::AnyExecutable&) () at /opt/ros/rolling/lib/librclcpp.so
#21 0x00007f69935bd324 in rclcpp::executors::MultiThreadedExecutor::run(unsigned long) () at /opt/ros/rolling/lib/librclcpp.so
#22 0x00007f69935bd915 in rclcpp::executors::MultiThreadedExecutor::spin() () at /opt/ros/rolling/lib/librclcpp.so
#23 0x00007f6993753aa5 in gazebo_ros::Executor::run() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#24 0x00007f699375c554 in void std::__invoke_impl(std::__invoke_memfun_deref, void (gazebo_ros::Executor::*&)(), gazebo_ros::Executor*&) ()
    at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#25 0x00007f699375c14b in std::__invoke_result::type std::__invoke(void (gazebo_ros::Executor::*&)(), gazebo_ros::Executor*&) ()
    at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#26 0x00007f699375b81d in void std::_Bind::__call(std::tuple<>&&, std::_Index_tuple<0ul>) () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#27 0x00007f699375ab0f in void std::_Bind::operator()<, void>() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#28 0x00007f699375d33e in void std::__invoke_impl>(std::__invoke_other, std::_Bind&&) ()
    at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#29 0x00007f699375d2e7 in std::__invoke_result>::type std::__invoke>(std::_Bind&&) () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#30 0x00007f699375d288 in void std::thread::_Invoker > >::_M_invoke<0ul>(std::_Index_tuple<0ul>) () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#31 0x00007f699375d0c6 in std::thread::_Invoker > >::operator()() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#32 0x00007f699375ce00 in std::thread::_State_impl > > >::_M_run() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#33 0x00007f699318acb4 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#34 0x00007f699347f609 in start_thread (arg=) at pthread_create.c:477
#35 0x00007f6992e7a293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) 
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007f6992d7d859 in __GI_abort () at abort.c:79
#2  0x00007f6993152951 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007f699315e47c in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007f699315e4e7 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007f699315e46f in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007f69935af6ed in rclcpp::exceptions::throw_from_rcl_error(int, std::__cxx11::basic_string, std::allocator > const&, rcutils_error_state_t const*, void (*)()) () at /opt/ros/rolling/lib/librclcpp.so
#7  0x00007f699363c7a6 in rclcpp::SubscriptionBase::SubscriptionBase(rclcpp::node_interfaces::NodeBaseInterface*, rosidl_message_type_support_t const&, std::__cxx11::basic_string, std::allocator > const&, rcl_subscription_options_t const&, bool) () at /opt/ros/rolling/lib/librclcpp.so
#8  0x00007f699365f8ed in rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >::Subscription(rclcpp::node_interfaces::NodeBaseInterface*, rosidl_message_type_support_t const&, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback >, std::allocator >, rclcpp::SubscriptionOptionsWithAllocator > const&, std::shared_ptr >, std::allocator > >, std::shared_ptr > > >) () at /opt/ros/rolling/lib/librclcpp.so
#9  0x00007f6993660764 in rclcpp::create_subscription_factory >, std::_Bind))(std::shared_ptr > >)>, std::allocator, rosgraph_msgs::msg::Clock_ >, rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >(std::_Bind))(std::shared_ptr > >)>&&, rclcpp::SubscriptionOptionsWithAllocator > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >::SharedPtr, std::shared_ptr > > >)::{lambda(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&)#1}::operator()(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&) const () at /opt/ros/rolling/lib/librclcpp.so
#10 0x00007f6993660948 in std::_Function_handler (rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&), rclcpp::create_subscription_factory >, std::_Bind))(std::shared_ptr > >)>, std::allocator, rosgraph_msgs::msg::Clock_ >, rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >(std::_Bind))(std::shared_ptr > >)>&&, rclcpp::SubscriptionOptionsWithAllocator > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >::SharedPtr, std::shared_ptr > > >)::{lambda(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&)#1}>::_M_invoke(std::_Any_data const&, rclcpp::node_interfaces::NodeBaseInterface*&&, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&) () at /opt/ros/rolling/lib/librclcpp.so
#11 0x00007f699360182b in rclcpp::node_interfaces::NodeTopics::create_subscription(std::__cxx11::basic_string, std::allocator > const&, rclcpp::SubscriptionFactory const&, rclcpp::QoS const&) () at /opt/ros/rolling/lib/librclcpp.so
#12 0x00007f699365d479 in std::shared_ptr >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > > > rclcpp::create_subscription >, std::_Bind))(std::shared_ptr > >)>, std::allocator, rosgraph_msgs::msg::Clock_ >, rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >, std::shared_ptr&>(std::shared_ptr&, std::__cxx11::basic_string, std::allocator > const&, rclcpp::QoS const&, std::_Bind))(std::shared_ptr > >)>&&, rclcpp::SubscriptionOptionsWithAllocator > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator >::SharedPtr) () at /opt/ros/rolling/lib/librclcpp.so
#13 0x00007f699363ecb6 in rclcpp::TimeSource::create_clock_sub() () at /opt/ros/rolling/lib/librclcpp.so
#14 0x00007f6993641638 in rclcpp::TimeSource::on_parameter_event(std::shared_ptr > >) () at /opt/ros/rolling/lib/librclcpp.so
#15 0x00007f69936495c8 in std::_Function_handler > >), std::_Bind))(std::shared_ptr > >)> >::_M_invoke(std::_Any_data const&, std::shared_ptr > >&&) () at /opt/ros/rolling/lib/librclcpp.so
#16 0x00007f69936594a1 in rclcpp::AnySubscriptionCallback >, std::allocator >::dispatch(std::shared_ptr > >, rclcpp::MessageInfo const&) ()
    at /opt/ros/rolling/lib/librclcpp.so
#17 0x00007f699365af6f in rclcpp::Subscription >, std::allocator, rclcpp::message_memory_strategy::MessageMemoryStrategy >, std::allocator > >::handle_message(std::shared_ptr&, rclcpp::MessageInfo const&) () at /opt/ros/rolling/lib/librclcpp.so
#18 0x00007f69935b3d1c in  () at /opt/ros/rolling/lib/librclcpp.so
#19 0x00007f69935b45db in rclcpp::Executor::execute_subscription(std::shared_ptr) () at /opt/ros/rolling/lib/librclcpp.so
#20 0x00007f69935b4d9a in rclcpp::Executor::execute_any_executable(rclcpp::AnyExecutable&) () at /opt/ros/rolling/lib/librclcpp.so
#21 0x00007f69935bd324 in rclcpp::executors::MultiThreadedExecutor::run(unsigned long) () at /opt/ros/rolling/lib/librclcpp.so
#22 0x00007f69935bd915 in rclcpp::executors::MultiThreadedExecutor::spin() () at /opt/ros/rolling/lib/librclcpp.so
#23 0x00007f6993753aa5 in gazebo_ros::Executor::run() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#24 0x00007f699375c554 in void std::__invoke_impl(std::__invoke_memfun_deref, void (gazebo_ros::Executor::*&)(), gazebo_ros::Executor*&) ()
    at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#25 0x00007f699375c14b in std::__invoke_result::type std::__invoke(void (gazebo_ros::Executor::*&)(), gazebo_ros::Executor*&) ()
    at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#26 0x00007f699375b81d in void std::_Bind::__call(std::tuple<>&&, std::_Index_tuple<0ul>) () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#27 0x00007f699375ab0f in void std::_Bind::operator()<, void>() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#28 0x00007f699375d33e in void std::__invoke_impl>(std::__invoke_other, std::_Bind&&) ()
    at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#29 0x00007f699375d2e7 in std::__invoke_result>::type std::__invoke>(std::_Bind&&) () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#30 0x00007f699375d288 in void std::thread::_Invoker > >::_M_invoke<0ul>(std::_Index_tuple<0ul>) () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#31 0x00007f699375d0c6 in std::thread::_Invoker > >::operator()() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#32 0x00007f699375ce00 in std::thread::_State_impl > > >::_M_run() () at /home/jacob/ws/ros/gazebo_ros_pkgs/install/gazebo_ros/lib/libgazebo_ros_node.so
#33 0x00007f699318acb4 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#34 0x00007f699347f609 in start_thread (arg=) at pthread_create.c:477
#35 0x00007f6992e7a293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
@jacobperron
Copy link
Collaborator Author

I'm looking into a fix.

@jacobperron
Copy link
Collaborator Author

Possibly related: I don't think rclcpp::MultiThreadedExecutor is thread-safe, which is possible causing this (or similar errors).

jacobperron added a commit that referenced this issue Nov 19, 2020
gazebo_ros incorrectly assumes rclcpp::MultiThreadedExecutor is thread-safe.
This change adds thread-safe wrappers to methods for adding/removing nodes and spinning.

I believe this fixes #1169.

This may have some performance impact on two fronts: 1) the locking while spinning and 2) switching from calling spin() to spin_once() (I think) removes the multi-threaded nature of the executor.

Signed-off-by: Jacob Perron <[email protected]>
jacobperron added a commit that referenced this issue Nov 20, 2020
The rclcpp::MultiThreadedExecutor is not thread safe, and so it is possible to hit races that cause gazebo_ros to crash. Specifically, there's a race when adding and removing nodes, which can happen when node are created and destroyed during runtime.

This is a copy of rclcpp::Executor with some modifications to make it thread safe. A lock was added to the spin implementation and also to the add_node and remove_node methods. In order to avoid deadlock, we must have a timeout in the spin loop while waiting for work.

Fixes #1169

Signed-off-by: Jacob Perron <[email protected]>
@jacobperron
Copy link
Collaborator Author

jacobperron commented Jan 6, 2021

Using ros2/rclcpp#1505, which addresses thread-safety issues, I still get the same crash in test_node. Here's a backtrace:

#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007f13342fa859 in __GI_abort () at abort.c:79
#2  0x00007f13346cf951 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007f13346db47c in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007f13346db4e7 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007f13346db46f in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007f1334ffe57c in rclcpp::exceptions::throw_from_rcl_error(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rcutils_error_state_t const*, void (*)())
    (ret=200, prefix="could not create subscription", error_state=0x0, reset_error=0x7f133481c28d <rcutils_reset_error>)
    at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/exceptions/exceptions.cpp:90
#7  0x00007f1335125fd9 in rclcpp::SubscriptionBase::SubscriptionBase(rclcpp::node_interfaces::NodeBaseInterface*, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rcl_subscription_options_t const&, bool) (this=0x7f1310001340, node_base=
    0x560838f5f9f0, type_support_handle=..., topic_name="/clock", subscription_options=..., is_serialized=false)
    at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/subscription_base.cpp:80
#8  0x00007f133514d059 in rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >::Subscription(rclcpp::node_interfaces::NodeBaseInterface*, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > >)
    (this=0x7f1310001340, node_base=0x560838f5f9f0, type_support_handle=..., topic_name="/clock", qos=..., callback=..., options=..., message_memory_strategy=std::shared_ptr<class rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >> (use count 4, weak count 0) = {...}, subscription_topic_statistics=std::shared_ptr<class rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > >> (empty) = {...})
    at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/include/rclcpp/subscription.hpp:119
#9  0x00007f133514b63e in __gnu_cxx::new_allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >::construct<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::Subscr--Type <RET> for more, q to quit, c to continue without paging--
ck_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >*, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) (this=0x7f1301ff61ff, __p=0x7f1310001340) at /usr/include/c++/9/ext/new_allocator.h:147
#10 0x00007f1335149b7a in std::allocator_traits<std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > > >::construct<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >&, rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >*, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) (__a=..., __p=0x7f1310001340) at /usr/include/c++/9/bits/alloc_traits.h:484
#11 0x00007f1335147dad in std::_Sp_counted_ptr_inplace<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) (this=0x7f1310001330, __a=...)
    at /usr/include/c++/9/bits/shared_ptr_base.h:548
#12 0x00007f1335145ca0 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >*&, std::_Sp_alloc_shared_tag<std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) (this=0x7f1301ff6678, __p=@0x7f1301ff6670: 0x0, __a=...)
    at /usr/include/c++/9/bits/shared_ptr_base.h:679
#13 0x00007f1335143ffc in std::__shared_ptr<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(std::_Sp_alloc_shared_tag<std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) (this=0x7f1301ff6670, __tag=...)
    at /usr/include/c++/9/bits/shared_ptr_base.h:1344
#14 0x00007f1335141fe2 in std::shared_ptr<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >::shared_ptr<std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(std::_Sp_alloc_shared_tag<std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) (this=0x7f1301ff6670, __tag=...)
    at /usr/include/c++/9/bits/shared_ptr.h:359
#15 0x00007f133513f1af in std::allocate_shared<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(std::allocator<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > > const&, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) (__a=...) at /usr/include/c++/9/bits/shared_ptr.h:702
#16 0x00007f133513c976 in std::make_shared<rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) ()
    at /usr/include/c++/9/bits/shared_ptr.h:718
#17 0x00007f133513987d in rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >::make_shared<rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&>(rclcpp::node_interfaces::NodeBaseInterface*&, rosidl_message_type_support_t const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, rclcpp::AnySubscriptionCallback<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > const&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > > const&, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > > const&) ()
    at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/include/rclcpp/subscription.hpp:82
#18 0x00007f13351363ee in rclcpp::create_subscription_factory<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>, std::allocator<void>, rosgraph_msgs::msg::Clock_<std::allocator<void> >, rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::all--Type <RET> for more, q to quit, c to continue without paging--
ocator<void> > >, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >(std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>&&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >::SharedPtr, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > >)::{lambda(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&)#1}::operator()(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&) const (this=0x7f13100010e0, node_base=0x560838f5f9f0, topic_name="/clock", qos=...)
    at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/include/rclcpp/subscription_factory.hpp:110
#19 0x00007f133513cc67 in std::_Function_handler<std::shared_ptr<rclcpp::SubscriptionBase> (rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&), rclcpp::create_subscription_factory<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>, std::allocator<void>, rosgraph_msgs::msg::Clock_<std::allocator<void> >, rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >(std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>&&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >::SharedPtr, std::shared_ptr<rclcpp::topic_statistics::SubscriptionTopicStatistics<rosgraph_msgs::msg::Clock_<std::allocator<void> > > >)::{lambda(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&)#1}>::_M_invoke(std::_Any_data const&, rclcpp::node_interfaces::NodeBaseInterface*&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&) (__functor=..., __args#0=@0x7f1301ff6758: 0x560838f5f9f0, __args#1="/clock", __args#2=...) at /usr/include/c++/9/bits/std_function.h:286
#20 0x00007f13350a8c27 in std::function<std::shared_ptr<rclcpp::SubscriptionBase> (rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&)>::operator()(rclcpp::node_interfaces::NodeBaseInterface*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&) const (this=0x7f1301ff6940, __args#0=0x560838f5f9f0, __args#1="/clock", __args#2=...) at /usr/include/c++/9/bits/std_function.h:688
#21 0x00007f13350a8390 in rclcpp::node_interfaces::NodeTopics::create_subscription(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::SubscriptionFactory const&, rclcpp::QoS const&)
    (this=0x5608390e6840, topic_name="/clock", subscription_factory=..., qos=...) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/node_interfaces/node_topics.cpp:80
#22 0x00007f1335132eaf in rclcpp::detail::create_subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>, std::allocator<void>, rosgraph_msgs::msg::Clock_<std::allocator<void> >, rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >, std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface>, std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface> >(std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface>&, std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>&&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >::SharedPtr) (node_parameters=
    std::shared_ptr<class rclcpp::node_interfaces::NodeTopicsInterface> (use count 5, weak count 0) = {...}, node_topics=std::shared_ptr<class rclcpp::node_interfaces::NodeTopicsInterface> (use count 5, weak count 0) = {...}, topic_name="/clock", qos=..., callback=..., options=..., msg_mem_strat=std::shared_ptr<class rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >> (use count 4, weak count 0) = {...})
    at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/include/rclcpp/create_subscription.hpp:136
#23 0x00007f1335130a4a in rclcpp::create_subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>, std::allocator<void>, rosgraph_msgs::msg::Clock_<std::allocator<void> >, rclcpp::Subscription<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> > >, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >, std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface> >(std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rclcpp::QoS const&, std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rosgraph_msgs::msg::Clock_<std::allocator<void> > >)>&&, rclcpp::SubscriptionOptionsWithAllocator<std::allocator<void> > const&, rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >::SharedPtr)
    (node=std::shared_ptr<class rclcpp::node_interfaces::NodeTopicsInterface> (use count 5, weak count 0) = {...}, topic_name="/clock", qos=..., callback=..., options=..., msg_mem_strat=std::shared_ptr<class rclcpp::message_memory_strategy::MessageMemoryStrategy<rosgraph_msgs::msg::Clock_<std::allocator<void> >, std::allocator<void> >> (use count 4, weak count 0) = {...}) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/include/rclcpp/create_subscription.hpp:198
#24 0x00007f133512d4d7 in rclcpp::TimeSource::create_clock_sub() (this=0x5608390c6b98) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/time_source.cpp:236
#25 0x00007f133512daa7 in rclcpp::TimeSource::on_parameter_event(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)
    (this=0x5608390c6b98, event=std::shared_ptr<struct rcl_interfaces::msg::ParameterEvent_<std::allocator<void> >> (use count 5, weak count 0) = {...}) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/time_source.cpp:268
#26 0x00007f133514a15a in std::__invoke_impl<void, void (rclcpp::TimeSource::*&)(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >), rclcpp::TimeSource*&, std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > > >(std::__invoke_memfun_deref, void (rclcpp::TimeSource::*&)(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >), rclcpp::TimeSource*&, std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >&&) (__f=
    @0x5608391dcd30: (void (rclcpp::TimeSource::*)(class rclcpp::TimeSource * const, class std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)) 0x7f133512d678 <rclcpp::TimeSource::on_parameter_event(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)>, __t=@0x5608391dcd40: 0x5608390c6b98) at /usr/include/c++/9/bits/invoke.h:73
#27 0x00007f133514866e in std::__invoke<void (rclcpp::TimeSource::*&)(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >), rclcpp::TimeSource*&, std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > > >(void (rclcpp::TimeSource::*&)(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >), rclcpp::TimeSource*&, std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >&&) (__fn=
    @0x5608391dcd30: (void (rclcpp::TimeSource::*)(class rclcpp::TimeSource * const, class std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)) 0x7f133512d678 <rclcpp::TimeSource::on_parameter_event(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)>) at /usr/include/c++/9/bits/invoke.h:95
#28 0x00007f1335146426 in std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)>::__call<void, std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >&&, 0ul, 1ul>(std::tuple<std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >&&>&&, std::_Index_tuple<0ul, 1ul>) (this=0x5608391dcd30, __args=...) at /usr/include/c++/9/functional:400
#29 0x00007f13351446c6 in std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)>::operator()<std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >, void>(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >&&) (this=0x5608391dcd30) at /usr/include/c++/9/functional:484
#30 0x00007f133514271b in std::_Function_handler<void (std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >), std::_Bind<void (rclcpp::TimeSource::*(rclcpp::TimeSource*, std::_Placeholder<1>))(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)> >::_M_invoke(std::_Any_data const&, std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >&&) (__functor=..., __args#0=...) at /usr/include/c++/9/bits/std_function.h:300
#31 0x00007f133517bc4d in std::function<void (std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >)>::operator()(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >) const
    (this=0x5608394569e0, __args#0=std::shared_ptr<struct rcl_interfaces::msg::ParameterEvent_<std::allocator<void> >> (empty) = {...}) at /usr/include/c++/9/bits/std_function.h:688
#32 0x00007f13351790bd in rclcpp::AnySubscriptionCallback<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> >, std::allocator<void> >::dispatch(std::shared_ptr<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> > >, rclcpp::MessageInfo const&)
    (this=0x5608394569e0, message=std::shared_ptr<struct rcl_interfaces::msg::ParameterEvent_<std::allocator<void> >> (use count 5, weak count 0) = {...}, message_info=...) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/include/rclcpp/any_subscription_callback.hpp:163
#33 0x00007f13351756ec in rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> >, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<rcl_interfaces::msg::ParameterEvent_<std::allocator<void> >, std::allocator<void> > >::handle_message(std::shared_ptr<void>&, rclcpp::MessageInfo const&) (this=0x560839456900, message=std::shared_ptr<void> (use count 5, weak count 0) = {...}, message_info=...) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/include/rclcpp/subscription.hpp:280
#34 0x00007f1335009eea in rclcpp::Executor::<lambda()>::operator()(void) const (__closure=0x7f1310000cb0) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/executor.cpp:631
#35 0x00007f133500d7dd in std::_Function_handler<void(), rclcpp::Executor::execute_subscription(rclcpp::SubscriptionBase::SharedPtr)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/9/bits/std_function.h:300
#36 0x00007f1334feef02 in std::function<void ()>::operator()() const (this=0x7f1301ff8790) at /usr/include/c++/9/bits/std_function.h:688
#37 0x00007f13350095d1 in take_and_do_error_handling(const char *, const char *, std::function<bool()>, std::function<void()>)
    (action_description=0x7f13351896f0 "taking a message from topic", topic_or_service_name=0x5608391d74a0 "/parameter_events", take_action=..., handle_action=...) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/executor.cpp:552
#38 0x00007f133500a599 in rclcpp::Executor::execute_subscription(std::shared_ptr<rclcpp::SubscriptionBase>) (subscription=std::shared_ptr<class rclcpp::SubscriptionBase> (use count 3, weak count 2) = {...})
    at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/executor.cpp:627
#39 0x00007f1335009342 in rclcpp::Executor::execute_any_executable(rclcpp::AnyExecutable&) (this=0x560838bce5c0, any_exec=...) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/executor.cpp:511
#40 0x00007f1335019ea5 in rclcpp::executors::MultiThreadedExecutor::run(unsigned long) (this=0x560838bce5c0) at /home/jacob/ws/ros/latest/src/ros2/rclcpp/rclcpp/src/rclcpp/executors/multi_threaded_executor.cpp:103
#41 0x00007f133501db5c in 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&) (__f=
    @0x7f12fc001f18: (void (rclcpp::executors::MultiThreadedExecutor::*)(class rclcpp::executors::MultiThreadedExecutor * const, unsigned long)) 0x7f1335019bee <rclcpp::executors::MultiThreadedExecutor::run(unsigned long)>, __t=@0x7f12fc001f30: 0x560838bce5c0)
    at /usr/include/c++/9/bits/invoke.h:73
#42 0x00007f133501da5a in std::__invoke<void (rclcpp::executors::MultiThreadedExecutor::*&)(unsigned long), rclcpp::executors::MultiThreadedExecutor*&, unsigned long&>(void (rclcpp::executors::MultiThreadedExecutor::*&)(unsigned long), rclcpp::executors::MultiThreadedExecutor*&, unsigned long&) (__fn=@0x7f12fc001f18: (void (rclcpp::executors::MultiThreadedExecutor::*)(class rclcpp::executors::MultiThreadedExecutor * const, unsigned long)) 0x7f1335019bee <rclcpp::executors::MultiThreadedExecutor::run(unsigned long)>)
    at /usr/include/c++/9/bits/invoke.h:95
#43 0x00007f133501d954 in std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>::__call<void, , 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) (this=0x7f12fc001f18, __args=...)
    at /usr/include/c++/9/functional:400
#44 0x00007f133501d8ab in std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)>::operator()<, void>() (this=0x7f12fc001f18) at /usr/include/c++/9/functional:484
--Type <RET> for more, q to quit, c to continue without paging--
#45 0x00007f133501d853 in 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)>&&) (__f=...) at /usr/include/c++/9/bits/invoke.h:60
#46 0x00007f133501d7e8 in 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)>&&) (__fn=...) at /usr/include/c++/9/bits/invoke.h:95
#47 0x00007f133501d77a in 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>) (this=0x7f12fc001f18)
    at /usr/include/c++/9/thread:244
#48 0x00007f133501d737 in std::thread::_Invoker<std::tuple<std::_Bind<void (rclcpp::executors::MultiThreadedExecutor::*(rclcpp::executors::MultiThreadedExecutor*, unsigned long))(unsigned long)> > >::operator()() (this=0x7f12fc001f18) at /usr/include/c++/9/thread:251
#49 0x00007f133501d708 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() (this=0x7f12fc001f10)
    at /usr/include/c++/9/thread:195
#50 0x00007f1334707d84 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#51 0x00007f1334837609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#52 0x00007f13343f7293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

@ivanpauno
Copy link
Collaborator

I will try to reproduce, as it doesn't seem obvious what's the problem from the traceback.
It seems that a node is being destroyed while the executor is still running and a subscription is still around, but I'm not sure how that can happen.

PS:

    (ret=200, prefix="could not create subscription", error_state=0x0, reset_error=0x7f133481c28d <rcutils_reset_error>)

ret=200 is an invalid node.

@jacobperron
Copy link
Collaborator Author

Fixed by #1212

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants