heartbeats can cause seg faults under tcp on linux
--------------------------------------------------
Key: QPID-2674
URL: https://issues.apache.org/jira/browse/QPID-2674
Project: Qpid
Issue Type: Bug
Components: C++ Broker, C++ Client
Reporter: Gordon Sim
Assignee: Andrew Stitcher
Priority: Blocker
Fix For: 0.7
If there is a queued callback that is processed during a writeable
event (or read-writeable) the writeable callback, i.e. AsynchIO::writeable(),
takes the path through
line 536 of AsyncIO.cpp, then AsynchIOHandler::closedSocket() is called
which deletes the AsynchIOHandler instance, the thread then goes on to process
the callbacks in DipatchHandle, which invoke on the now deleted AsynchIOHandler.
Results in cores like:
Core was generated by `/home/gordon/qpid/cpp/build/src/.libs/lt-qpidd
--load-module /home/gordon/qpid/'.
Program terminated with signal 11, Segmentation fault.
[New process 9483]
[New process 9516]
[New process 9490]
[New process 9489]
[New process 9488]
[New process 9487]
[New process 9486]
[New process 9484]
#0 0x00002aaefd5e999d in qpid::sys::AsynchIOHandler::disconnect
(this=0x1a4f0880) at ../../src/qpid/sys/AsynchIOHandler.cpp:194
194 if (codec) codec->closed();
(gdb) bt
#0 0x00002aaefd5e999d in qpid::sys::AsynchIOHandler::disconnect
(this=0x1a4f0880) at ../../src/qpid/sys/AsynchIOHandler.cpp:194
#1 0x00002aaefd5e9c29 in qpid::sys::AsynchIOHandler::eof (this=0x2aaab1b330c0,
a...@0x1a8778a0) at ../../src/qpid/sys/AsynchIOHandler.cpp:177
#2 0x00002aaefd51ccbf in boost::function1<void, qpid::sys::AsynchIO&,
std::allocator<boost::function_base> >::operator() (this=0x2aaefd5e9c20,
a...@0x1a8778a0) at /usr/include/boost/function/function_template.hpp:576
#3 0x00002aaefd51c873 in
boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void,
boost::_mfi::mf1<void, qpid::sys::posix::AsynchIO, boost::function1<void,
qpid::sys::AsynchIO&, std::allocator<boost::function_base> > >,
boost::_bi::list2<boost::_bi::value<qpid::sys::posix::AsynchIO*>,
boost::_bi::value<boost::function1<void, qpid::sys::AsynchIO&,
std::allocator<boost::function_base> > > > >, void,
qpid::sys::DispatchHandle&>::invoke (function_obj_ptr=<value optimized out>,
a0=<value optimized out>) at /usr/include/boost/bind/mem_fn_template.hpp:149
#4 0x00002aaefd5ee49f in boost::function1<void, qpid::sys::DispatchHandle&,
std::allocator<boost::function_base> >::operator() (this=0x2aaefd5e9c20,
a...@0x1a8778a0) at /usr/include/boost/function/function_template.hpp:576
#5 0x00002aaefd5ed2b6 in qpid::sys::DispatchHandle::processEvent
(this=0x1a8778a8, type=qpid::sys::Poller::READ_WRITABLE)
at ../../src/qpid/sys/DispatchHandle.cpp:309
#6 0x00002aaefd526e98 in qpid::sys::Poller::run (this=0x19b4ee00) at
../../src/qpid/sys/Poller.h:125
#7 0x00002aaefd0844e4 in qpid::broker::Broker::run (this=<value optimized
out>) at ../../src/qpid/broker/Broker.cpp:339
#8 0x0000000000409014 in QpiddDaemon::child (this=0x7fff989850d0) at
../../src/posix/QpiddBroker.cpp:130
#9 0x00002aaefd0a482f in qpid::broker::Daemon::fork (this=0x7fff989850d0) at
../../src/qpid/broker/Daemon.cpp:91
#10 0x0000000000407585 in QpiddBroker::execute (this=<value optimized out>,
options=<value optimized out>) at ../../src/posix/QpiddBroker.cpp:168
#11 0x00000000004057ff in main (argc=12, argv=0x7fff989856b8) at
../../src/qpidd.cpp:80
(gdb) print codec
$1 = (class qpid::sys::ConnectionCodec *) 0x2aaab1b330c0
(gdb) thread apply all bt
Thread 8 (process 9484):
#0 0x00000038f9c92149 in strftime_l () from /lib64/libc.so.6
#1 0x00002aaefd51f111 in qpid::sys::outputFormattedNow (o...@0x413214b0) at
../../src/qpid/sys/posix/Time.cpp:89
#2 0x00002aaefd5da5a1 in qpid::log::Logger::log (this=0x2aaefd895680,
s...@0x2aaefd894d80, m...@0x41321770) at ../../src/qpid/log/Logger.cpp:77
#3 0x00002aaefd5dfa9c in qpid::log::Statement::log (this=0x2aaefd894d80,
messa...@0x41321f90) at ../../src/qpid/log/Statement.cpp:57
#4 0x00002aaefd5f3b4b in qpid::sys::Timer::run (this=0x19b59b40) at
../../src/qpid/sys/Timer.cpp:129
#5 0x00002aaefd51f14a in runRunnable (p=0x413213f0) at
../../src/qpid/sys/posix/Thread.cpp:35
#6 0x00000038fa406617 in start_thread () from /lib64/libpthread.so.0
#7 0x00000038f9cd3c2d in clone () from /lib64/libc.so.6
Thread 7 (process 9486):
#0 0x00000038fa40ad09 in pthread_cond_wait@@GLIBC_2.3.2 () from
/lib64/libpthread.so.0
#1 0x00002aaefd5f3b73 in qpid::sys::Timer::run (this=0x19b5f490) at
../../include/qpid/sys/posix/Condition.h:63
#2 0x00002aaefd51f14a in runRunnable (p=0x19b5f4c4) at
../../src/qpid/sys/posix/Thread.cpp:35
#3 0x00000038fa406617 in start_thread () from /lib64/libpthread.so.0
#4 0x00000038f9cd3c2d in clone () from /lib64/libc.so.6
Thread 6 (process 9487):
#0 0x00000038f9cd4018 in epoll_wait () from /lib64/libc.so.6
#1 0x00002aaefd526343 in qpid::sys::Poller::wait (this=0x19b4ee00,
timeout=<value optimized out>) at ../../src/qpid/sys/epoll/EpollPoller.cpp:570
#2 0x00002aaefd526ea7 in qpid::sys::Poller::run (this=0x19b4ee00) at
../../src/qpid/sys/epoll/EpollPoller.cpp:517
#3 0x00002aaefd51f14a in runRunnable (p=0x5) at
../../src/qpid/sys/posix/Thread.cpp:35
#4 0x00000038fa406617 in start_thread () from /lib64/libpthread.so.0
#5 0x00000038f9cd3c2d in clone () from /lib64/libc.so.6
Thread 5 (process 9488):
#0 0x00000038f9cd3f9a in epoll_ctl () from /lib64/libc.so.6
#1 0x00002aaefd525fd7 in qpid::sys::PollerPrivate::resetMode (this=0x19b593a0,
e...@0x2aaab4090920) at ../../src/qpid/sys/epoll/EpollPoller.cpp:389
#2 0x00002aaefd52624d in qpid::sys::Poller::wait (this=0x19b4ee00,
timeout=<value optimized out>) at ../../src/qpid/sys/epoll/EpollPoller.cpp:558
#3 0x00002aaefd526ea7 in qpid::sys::Poller::run (this=0x19b4ee00) at
../../src/qpid/sys/epoll/EpollPoller.cpp:517
#4 0x00002aaefd51f14a in runRunnable (p=0x5) at
../../src/qpid/sys/posix/Thread.cpp:35
#5 0x00000038fa406617 in start_thread () from /lib64/libpthread.so.0
#6 0x00000038f9cd3c2d in clone () from /lib64/libc.so.6
Thread 4 (process 9489):
#0 0x00000038f9cd447b in accept () from /lib64/libc.so.6
#1 0x00002aaefd511ca4 in qpid::sys::Socket::accept (this=<value optimized
out>) at ../../src/qpid/sys/posix/Socket.cpp:215
#2 0x00002aaefd51a085 in qpid::sys::posix::AsynchAcceptor::readable
(this=0x19b634b0, h...@0x19b634d0) at ../../src/qpid/sys/posix/AsynchIO.cpp:121
#3 0x00002aaefd5ee49f in boost::function1<void, qpid::sys::DispatchHandle&,
std::allocator<boost::function_base> >::operator() (this=0x157, a...@0x0)
at /usr/include/boost/function/function_template.hpp:576
---Type <return> to continue, or q <return> to quit---
#4 0x00002aaefd5ed1f9 in qpid::sys::DispatchHandle::processEvent
(this=0x19b634d0, type=qpid::sys::Poller::READABLE)
at ../../src/qpid/sys/DispatchHandle.cpp:278
#5 0x00002aaefd526e98 in qpid::sys::Poller::run (this=0x19b4ee00) at
../../src/qpid/sys/Poller.h:125
#6 0x00002aaefd51f14a in runRunnable (p=0x13) at
../../src/qpid/sys/posix/Thread.cpp:35
#7 0x00000038fa406617 in start_thread () from /lib64/libpthread.so.0
#8 0x00000038f9cd3c2d in clone () from /lib64/libc.so.6
Thread 3 (process 9490):
#0 0x00000038f9cd3f9a in epoll_ctl () from /lib64/libc.so.6
#1 0x00002aaefd525fd7 in qpid::sys::PollerPrivate::resetMode (this=0x19b593a0,
e...@0x2aaab40dc910) at ../../src/qpid/sys/epoll/EpollPoller.cpp:389
#2 0x00002aaefd52624d in qpid::sys::Poller::wait (this=0x19b4ee00,
timeout=<value optimized out>) at ../../src/qpid/sys/epoll/EpollPoller.cpp:558
#3 0x00002aaefd526ea7 in qpid::sys::Poller::run (this=0x19b4ee00) at
../../src/qpid/sys/epoll/EpollPoller.cpp:517
#4 0x00002aaefd51f14a in runRunnable (p=0x5) at
../../src/qpid/sys/posix/Thread.cpp:35
#5 0x00000038fa406617 in start_thread () from /lib64/libpthread.so.0
#6 0x00000038f9cd3c2d in clone () from /lib64/libc.so.6
Thread 2 (process 9516):
#0 0x00000038f9cd4018 in epoll_wait () from /lib64/libc.so.6
#1 0x00002aaefd526343 in qpid::sys::Poller::wait (this=0x19b65e60,
timeout=<value optimized out>) at ../../src/qpid/sys/epoll/EpollPoller.cpp:570
#2 0x00002aaefd526ea7 in qpid::sys::Poller::run (this=0x19b65e60) at
../../src/qpid/sys/epoll/EpollPoller.cpp:517
#3 0x00002aaefd51f14a in runRunnable (p=0x14) at
../../src/qpid/sys/posix/Thread.cpp:35
#4 0x00000038fa406617 in start_thread () from /lib64/libpthread.so.0
#5 0x00000038f9cd3c2d in clone () from /lib64/libc.so.6
Thread 1 (process 9483):
#0 0x00002aaefd5e999d in qpid::sys::AsynchIOHandler::disconnect
(this=0x1a4f0880) at ../../src/qpid/sys/AsynchIOHandler.cpp:194
#1 0x00002aaefd5e9c29 in qpid::sys::AsynchIOHandler::eof (this=0x2aaab1b330c0,
a...@0x1a8778a0) at ../../src/qpid/sys/AsynchIOHandler.cpp:177
#2 0x00002aaefd51ccbf in boost::function1<void, qpid::sys::AsynchIO&,
std::allocator<boost::function_base> >::operator() (this=0x2aaefd5e9c20,
a...@0x1a8778a0) at /usr/include/boost/function/function_template.hpp:576
#3 0x00002aaefd51c873 in
boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void,
boost::_mfi::mf1<void, qpid::sys::posix::AsynchIO, boost::function1<void,
qpid::sys::AsynchIO&, std::allocator<boost::function_base> > >,
boost::_bi::list2<boost::_bi::value<qpid::sys::posix::AsynchIO*>,
boost::_bi::value<boost::function1<void, qpid::sys::AsynchIO&,
std::allocator<boost::function_base> > > > >, void,
qpid::sys::DispatchHandle&>::invoke (function_obj_ptr=<value optimized out>,
a0=<value optimized out>) at /usr/include/boost/bind/mem_fn_template.hpp:149
#4 0x00002aaefd5ee49f in boost::function1<void, qpid::sys::DispatchHandle&,
std::allocator<boost::function_base> >::operator() (this=0x2aaefd5e9c20,
a...@0x1a8778a0) at /usr/include/boost/function/function_template.hpp:576
#5 0x00002aaefd5ed2b6 in qpid::sys::DispatchHandle::processEvent
(this=0x1a8778a8, type=qpid::sys::Poller::READ_WRITABLE)
at ../../src/qpid/sys/DispatchHandle.cpp:309
#6 0x00002aaefd526e98 in qpid::sys::Poller::run (this=0x19b4ee00) at
../../src/qpid/sys/Poller.h:125
#7 0x00002aaefd0844e4 in qpid::broker::Broker::run (this=<value optimized
out>) at ../../src/qpid/broker/Broker.cpp:339
#8 0x0000000000409014 in QpiddDaemon::child (this=0x7fff989850d0) at
../../src/posix/QpiddBroker.cpp:130
#9 0x00002aaefd0a482f in qpid::broker::Daemon::fork (this=0x7fff989850d0) at
../../src/qpid/broker/Daemon.cpp:91
---Type <return> to continue, or q <return> to quit---
#10 0x0000000000407585 in QpiddBroker::execute (this=<value optimized out>,
options=<value optimized out>) at ../../src/posix/QpiddBroker.cpp:168
#11 0x00000000004057ff in main (argc=12, argv=0x7fff989856b8) at
../../src/qpidd.cpp:80
(gdb)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]