The following code runs fine:
hm = _blk->in_nb<MotionHeadMessage>("MotionHeadMessage", "KImageExtractor");
/* Messages from Behavior */
//wm = _blk->in_nb<MotionWalkMessage>("MotionWalkMessage", "Behavior");
//if (hm == NULL) hm = _blk->in_nb<MotionHeadMessage>("MotionHeadMessage", "Behavior");
//am = _blk->in_nb<MotionActionMessage>("MotionActionMessage", "Behavior");
/* Messages from Motion Controller */
wm = _blk->in_nb<MotionWalkMessage>("MotionWalkMessage", "MotionController");
if (hm == NULL) hm = _blk->in_nb<MotionHeadMessage>("MotionHeadMessage", "MotionController");
am = _blk->in_nb<MotionActionMessage>("MotionActionMessage", "MotionController");
I comment out the first line (because the KImageExtractor does not run)
//hm = _blk->in_nb<MotionHeadMessage>("MotionHeadMessage", "KImageExtractor");
/* Messages from Behavior */
//wm = _blk->in_nb<MotionWalkMessage>("MotionWalkMessage", "Behavior");
//if (hm == NULL) hm = _blk->in_nb<MotionHeadMessage>("MotionHeadMessage", "Behavior");
//am = _blk->in_nb<MotionActionMessage>("MotionActionMessage", "Behavior");
/* Messages from Motion Controller */
wm = _blk->in_nb<MotionWalkMessage>("MotionWalkMessage", "MotionController");
if (hm == NULL) hm = _blk->in_nb<MotionHeadMessage>("MotionHeadMessage", "MotionController");
am = _blk->in_nb<MotionActionMessage>("MotionActionMessage", "MotionController");
and I get a segmentation fault. Here is a copy of the gdb output:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb4ebab70 (LWP 7076)]
0x02443e35 in std::string::compare(char const*) const () from /usr/lib/libstdc++.so.6
(gdb) bt
#0 0x02443e35 in std::string::compare(char const*) const () from /usr/lib/libstdc++.so.6
#1 0x009456e0 in bool std::operator==<char, std::char_traits, std::allocator >(std::basic_string<char, std::char_traits, std::allocator > const&, char const*) () from /home/lagoudakis/Desktop/Code/Nao/aldebaran-sdk/lib/libboost_serialization-mt-d.so
#2 0x043fd43b in MotionController::mglrun (this=0x815e068) at /home/lagoudakis/Desktop/Code/Monad/src/activities/MotionController/MotionController.cpp:201
#3 0x043fb314 in MotionController::Execute (this=0x815e068) at /home/lagoudakis/Desktop/Code/Monad/src/activities/MotionController/MotionController.cpp:69
#4 0x00538f24 in Agent::Execute (this=0x815df98) at /home/lagoudakis/Desktop/Code/Monad/src/./architecture/agent.h:64
#5 0x004e1469 in Thread::startHelper (this=0x815df98) at /home/lagoudakis/Desktop/Code/Monad/src/./hal/thread.h:46
#6 0x004e89b5 in boost::_mfi::mf0<void, Thread>::operator() (this=0x822b524, p=0x815df98) at /usr/include/boost/bind/mem_fn_template.hpp:49
#7 0x004e88ec in boost::_bi::list1boost::_bi::value<Thread* >::operator()<boost::_mfi::mf0<void, Thread>, boost::_bi::list0> (this=0x822b52c, f=...,
a=...) at /usr/include/boost/bind.hpp:232
#8 0x004e8850 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, Thread>, boost::_bi::list1boost::_bi::value<Thread* > >::operator() (this=0x822b524)
at /usr/include/boost/bind/bind_template.hpp:20
#9 0x004e8602 in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Thread>, boost::_bi::list1boost::_bi::value<Thread* > > >::run (this=0x822b468) at /usr/include/boost/thread/detail/thread.hpp:56
#10 0x00d66eb7 in thread_proxy (param=0x822b468) at /home/robocuper/AR/boost_1_38_0/libs/thread/src/pthread/thread.cpp:130
#11 0x00ef780e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#12 0x0267ea0e in clone () from /lib/tls/i686/cmov/libc.so.6
Note that line 201 is this one: if (hm->command() == "setHead") {
Why do I have to try to read messages from KImageExtractor, if I don't expect any messages from there?
The following code runs fine:
I comment out the first line (because the KImageExtractor does not run)
and I get a segmentation fault. Here is a copy of the gdb output:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb4ebab70 (LWP 7076)]
0x02443e35 in std::string::compare(char const*) const () from /usr/lib/libstdc++.so.6
(gdb) bt
#0 0x02443e35 in std::string::compare(char const*) const () from /usr/lib/libstdc++.so.6
#1 0x009456e0 in bool std::operator==<char, std::char_traits, std::allocator >(std::basic_string<char, std::char_traits, std::allocator > const&, char const*) () from /home/lagoudakis/Desktop/Code/Nao/aldebaran-sdk/lib/libboost_serialization-mt-d.so
#2 0x043fd43b in MotionController::mglrun (this=0x815e068) at /home/lagoudakis/Desktop/Code/Monad/src/activities/MotionController/MotionController.cpp:201
#3 0x043fb314 in MotionController::Execute (this=0x815e068) at /home/lagoudakis/Desktop/Code/Monad/src/activities/MotionController/MotionController.cpp:69
#4 0x00538f24 in Agent::Execute (this=0x815df98) at /home/lagoudakis/Desktop/Code/Monad/src/./architecture/agent.h:64
#5 0x004e1469 in Thread::startHelper (this=0x815df98) at /home/lagoudakis/Desktop/Code/Monad/src/./hal/thread.h:46
#6 0x004e89b5 in boost::_mfi::mf0<void, Thread>::operator() (this=0x822b524, p=0x815df98) at /usr/include/boost/bind/mem_fn_template.hpp:49
#7 0x004e88ec in boost::_bi::list1boost::_bi::value<Thread* >::operator()<boost::_mfi::mf0<void, Thread>, boost::_bi::list0> (this=0x822b52c, f=...,
#8 0x004e8850 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, Thread>, boost::_bi::list1boost::_bi::value<Thread* > >::operator() (this=0x822b524)
#9 0x004e8602 in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Thread>, boost::_bi::list1boost::_bi::value<Thread* > > >::run (this=0x822b468) at /usr/include/boost/thread/detail/thread.hpp:56
#10 0x00d66eb7 in thread_proxy (param=0x822b468) at /home/robocuper/AR/boost_1_38_0/libs/thread/src/pthread/thread.cpp:130
#11 0x00ef780e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#12 0x0267ea0e in clone () from /lib/tls/i686/cmov/libc.so.6
Note that line 201 is this one: if (hm->command() == "setHead") {
Why do I have to try to read messages from KImageExtractor, if I don't expect any messages from there?