Very rare crash in ROS spinner thread inside Publisher::publish
I am publishing a message with a standard ros::Publisher. At one point I got a crash, which occurred outside my own thread!
I know for sure that the publisher hasn't gone out of scope at the time of crash. But the message object DOES go out-of-scope, since it is locally created and fed to publisher:
static void StopFocus(const std::string &client_id) {
aeolus_nav_msgs::TrajectoryGeneratorHeader msg;
msg.client_id = client_id;
msg.priority = FocusPriority::REMOVE;
to_generator.publish(msg); // standard ros::Publisher
}
I am sure message going out of scope is not the issue... What could the problem be? Can anyone help me please? 🙏 🙏 🙏
A got a backtrace of the crash, and it's like:
Thread 1 (Thread 0x7f727effd700 (LWP 1272)):
#0 0x00007f72cbdc6eb0 in __memmove_avx_unaligned_erms ()
at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:371
#1 0x00007f72d8283966 in memcpy (__len=<optimized out>, __src=<optimized out>, __dest=<optimized out>)
at /usr/include/x86_64-linux-gnu/bits/string_fortified.h:34
#2 0x00007f72d8283966 in ros::serialization::Serializer<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::write<ros::serialization::OStream>(ros::serialization::OStream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (str="", stream=<synthetic pointer>...) at /opt/ros/melodic/include/ros/serialization.h:245
#3 0x00007f72d8283966 in ros::serialization::serialize<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ros::serialization::OStream>(ros::serialization::OStream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (t="", stream=<synthetic pointer>...) at /opt/ros/melodic/include/ros/serialization.h:154
#4 0x00007f72d8283966 in ros::serialization::OStream::next<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (t="", this=<synthetic pointer>) at /opt/ros/melodic/include/ros/serialization.h:747
#5 0x00007f72d8283966 in ros::serialization::Serializer<nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > >::allInOne<ros::serialization::OStream, nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&>(ros::serialization::OStream&, nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&) (m=..., stream=<synthetic pointer>...)
at /opt/ros/melodic/include/nav_msgs/TrajectoryGeneratorHeader.h:189
#6 0x00007f72d8283966 in ros::serialization::Serializer<nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > >::write<ros::serialization::OStream, nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > >(ros::serialization::OStream&, nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&) (t=..., stream=<synthetic pointer>...)
at /opt/ros/melodic/include/nav_msgs/TrajectoryGeneratorHeader.h:195
#7 0x00007f72d8283966 in ros::serialization::serialize<nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> >, ros::serialization::OStream>(ros::serialization::OStream&, nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&) (t=..., stream=<synthetic pointer>...)
at /opt/ros/melodic/include/ros/serialization.h:154
#8 0x00007f72d8283966 in ros::serialization::serializeMessage<nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > >(nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&) (message=...)
at /opt/ros/melodic/include/ros/serialization.h:815
#9 0x00007f72d8281e21 in boost::_bi::list1<boost::reference_wrapper<nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const> >::operator()<ros::SerializedMessage, ros::SerializedMessage (*)(nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&), boost::_bi::list0>(boost::_bi::type<ros::SerializedMessage>, ros::SerializedMessage (*&)(nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&), boost::_bi::list0&, long) (f=<optimized out>, a=<synthetic pointer>..., this=<optimized out>)
at /usr/include/boost/bind/bind.hpp:249
#10 0x00007f72d8281e21 in boost::_bi::bind_t<ros::SerializedMessage, ros::SerializedMessage (*)(nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const&), boost::_bi::list1<boost::reference_wrapper<nav_msgs::TrajectoryGeneratorHeader_<std::allocator<void> > const> > >::operator()() (this=<optimized out>) at /usr/include/boost/bind/bind.hpp ...
You don't show the actual crash. I'm guessing it's a
SEGFAULT
?That is correct
I doubt anyone will be able to say anything about this without reproducing it and then stepping in a debugger.
One possible cause could be that
str=""
, butlen!=0
. But why that would be the case I have no idea.