[Rock-dev] [rock] #214: Component runs into assert in RTT::internal::TsPool<>::size

rock noreply at opendfki.de
Fri Nov 9 15:54:19 CET 2012


#214: Component runs into assert in RTT::internal::TsPool<>::size
---------------------+-----------------------------------
 Reporter:  thro02   |      Owner:  rock-dev-mailing-list
     Type:  defect   |     Status:  new
 Priority:  blocker  |  Milestone:
Component:  base     |   Keywords:
---------------------+-----------------------------------
 After an update to the lastest (branch master) roby et.al. I now run into
 an assert in: rtt/internal/TsPool.hpp +213 (when using the component
 together with the supervision):
 {{{
              /**
              * Return the number of elements that are available to be
 allocated.
              * This function is not thread-safe and should not be used
 when concurrent
              * allocate()/deallocate() functions are running.
              * @return the number of elements left to allocate.
              */
             unsigned int size()
             {
                 unsigned int ret = 0;
                 volatile Item* oldval;
                 oldval = &head;
                 while ( oldval->next.ptr.index != (unsigned short) -1) {
                     ++ret;
                     oldval = &pool[oldval->next.ptr.index];
                     assert(ret <= pool_capacity); // abort on corruption
 due to concurrency.
                 }
                 return ret;
             }
 }}}

 The corresponding backtrace:
 {{{
 #0  0x00007f93afed0a75 in raise () from /lib/libc.so.6
 #1  0x00007f93afed45c0 in abort () from /lib/libc.so.6
 #2  0x00007f93afec9941 in __assert_fail () from /lib/libc.so.6
 #3  0x00007f93b1791711 in
 RTT::internal::TsPool<monster::ProcessList>::size (this=0x1567bb0) at
 /opt/software/install/include/rtt/types/../internal/../base/../internal/TsPool.hpp:213
 #4  0x00007f93b178d781 in ~TsPool (this=0x1567bb0, __in_chrg=<value
 optimized out>) at
 /opt/software/install/include/rtt/types/../internal/../base/../internal/TsPool.hpp:125
 #5  0x00007f93b179c361 in ~BufferLockFree (this=0x1567b90,
 __in_chrg=<value optimized out>) at
 /opt/software/install/include/rtt/types/../internal/../base/BufferLockFree.hpp:94
 #6  0x00007f93b1791ac4 in
 boost::checked_delete<RTT::base::BufferInterface<monster::ProcessList> >
 (x=0x1567b90) at /opt/boost/include/boost/checked_delete.hpp:34
 #7  0x00007f93b179b242 in
 boost::detail::sp_counted_impl_p<RTT::base::BufferInterface<monster::ProcessList>
 >::dispose (this=0x15db200) at
 /opt/boost/include/boost/smart_ptr/detail/sp_counted_impl.hpp:78
 #8  0x000000000042a6d6 in boost::detail::sp_counted_base::release
 (this=0x15db200) at
 /opt/boost/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:145
 #9  0x000000000042a74f in ~shared_count (this=0x1567cb8, __in_chrg=<value
 optimized out>) at
 /opt/boost/include/boost/smart_ptr/detail/shared_count.hpp:217
 #10 0x00007f93b178b7b0 in ~shared_ptr (this=0x1567cb0, __in_chrg=<value
 optimized out>) at /opt/boost/include/boost/smart_ptr/shared_ptr.hpp:169
 #11 0x00007f93b179b392 in ~ChannelBufferElement (this=0x1567c60,
 __in_chrg=<value optimized out>) at
 /opt/software/install/include/rtt/types/../internal/ChannelBufferElement.hpp:65
 #12 0x00007f93b64008b4 in RTT::base::ChannelElementBase::disconnect(bool)
 () from /opt/software/install/lib/liborocos-rtt-gnulinux.so.2.5
 #13 0x00007f93b179e483 in
 RTT::internal::ConnInputEndpoint<monster::ProcessList>::disconnect
 (this=0x1567cd0, forward=true) at
 /opt/software/install/include/rtt/types/../internal/ConnInputEndPoint.hpp:81
 #14 0x00007f93b6413a1b in
 RTT::internal::ConnectionManager::removeConnection(RTT::internal::ConnID*)
 () from /opt/software/install/lib/liborocos-rtt-gnulinux.so.2.5
 #15 0x00007f93b6413c18 in
 RTT::internal::ConnectionManager::disconnect(RTT::base::PortInterface*) ()
 from /opt/software/install/lib/liborocos-rtt-gnulinux.so.2.5
 #16 0x00007f93b1013e21 in
 RTT::corba::CDataFlowInterface_i::removeConnection(char const*,
 RTT::corba::_objref_CDataFlowInterface*, char const*) () from
 /opt/software/install/lib/liborocos-rtt-corba-gnulinux.so.2.5
 #17 0x00007f93b104bbc6 in
 _0RL_lcfn_8fd6acea43f2a3c6_e1000000(omniCallDescriptor*, omniServant*) ()
 from /opt/software/install/lib/liborocos-rtt-corba-gnulinux.so.2.5
 #18 0x00007f93b0cd2f79 in omniCallHandle::upcall(omniServant*,
 omniCallDescriptor&) () from /usr/lib/libomniORB4.so.1
 #19 0x00007f93b1053f49 in
 RTT::corba::_impl_CDataFlowInterface::_dispatch(omniCallHandle&) () from
 /opt/software/install/lib/liborocos-rtt-corba-gnulinux.so.2.5
 #20 0x00007f93b1043ab1 in
 RTT::corba::_impl_CService::_dispatch(omniCallHandle&) () from
 /opt/software/install/lib/liborocos-rtt-corba-gnulinux.so.2.5
 #21 0x00007f93b0cbf9bd in omni::omniOrbPOA::dispatch(omniCallHandle&,
 omniLocalIdentity*) () from /usr/lib/libomniORB4.so.1
 #22 0x00007f93b0ca5068 in omniLocalIdentity::dispatch(omniCallHandle&) ()
 from /usr/lib/libomniORB4.so.1
 #23 0x00007f93b0cf18df in omni::GIOP_S::handleRequest() () from
 /usr/lib/libomniORB4.so.1
 #24 0x00007f93b0cf2088 in omni::GIOP_S::dispatcher() () from
 /usr/lib/libomniORB4.so.1
 #25 0x00007f93b0ceea4e in omni::giopWorker::real_execute() () from
 /usr/lib/libomniORB4.so.1
 #26 0x00007f93b0cef08f in omni::giopWorker::execute() () from
 /usr/lib/libomniORB4.so.1
 #27 0x00007f93b0c9b5f7 in omniAsyncWorker::real_run() () from
 /usr/lib/libomniORB4.so.1
 #28 0x00007f93b0c9b8bf in omniAsyncWorker::run(void*) () from
 /usr/lib/libomniORB4.so.1
 #29 0x00007f93b09d424d in omni_thread_wrapper () from
 /usr/lib/libomnithread.so.3
 #30 0x00007f93b60c39ca in start_thread () from /lib/libpthread.so.0
 #31 0x00007f93aff8616d in clone () from /lib/libc.so.6
 #32 0x0000000000000000 in ?? ()
 }}}

 Before a number of log messages appear regarding connection policies:

 Cannot compute the period information for the output port
 Orocos[WARN]:
 tProxy(Orocos::RobyPlugin::Monster::InterfaceModule:0x7f441df079a0){conf
 => [default], orocos_name => MONSTERINTERFACE}:processes_out
 Orocos[WARN]:    This is needed to compute the policy to connect to
 Orocos[WARN]:
 tProxy(Orocos::RobyPlugin::Logger::Logger:0x7f441dec07d0){conf =>
 [default], orocos_name =>
 MONSTERINTERFACE_Logger}:MONSTERINTERFACE.processes_out
 Orocos[WARN]:    The fallback policy {type => buffer, size => 25} will be
 used

 Any ideas/suggestions?

-- 
Ticket URL: <https://rock.opendfki.de/ticket/214>
rock <https://rock.opendfki.de>
rock: the robot construction kit


More information about the Rock-dev mailing list