You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Martin Schlapfer (JIRA)" <ji...@apache.org> on 2009/05/07 14:41:39 UTC

[jira] Commented: (AMQCPP-242) Segfault when destroying auto pointer managed objects

    [ https://issues.apache.org/activemq/browse/AMQCPP-242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=51557#action_51557 ] 

Martin Schlapfer commented on AMQCPP-242:
-----------------------------------------

Tim,

I was going to comment on AMQCPP-231, but saw this one open up, so I will comment here.  I think the two are possibly related.

The AtomicRefCounter class release() method in Pointer.h is not thread safe the way it uses AtomicInteger::decrementAndGet().  The decrementAndGet() looks like:
	
	apr_atomic_dec32( &this->value );
	return this->value;

Between the two statements a context switch could occur.  This could cause the value to be returned as zero in each thread to the caller.  Thus, the AtomicRefCounter class release() method could try an delete an object twice.

Perhaps a fix is to introduce a new method that simply decrements and checks if the result is zero (using apt_atomic_dec32's return value).

Here is a sample program (below) to illustrate the problem (note on Windows I needed to put an apr_thread_yield() in between the two statements above to "force" a context swicth, but I suspect on RHEL you would not need to do that).

Cheers,
Martin.


#include <decaf/lang/Thread.h>
#include <decaf/lang/Pointer.h>
#include <decaf/util/concurrent/CountDownLatch.h>
#include <decaf/util/concurrent/Mutex.h>

using namespace decaf::lang;
using namespace decaf::util::concurrent;

class Gate {
	private:
		CountDownLatch * enter_latch;
		CountDownLatch * leave_latch;
		Mutex mutex;
		bool closed;

	public:
		Gate() {
			closed = true;
		}
		virtual ~Gate() {}

		void open(int count) {
			leave_latch = new CountDownLatch(count);
			enter_latch = new CountDownLatch(count);
			mutex.lock();
			closed = false;
			mutex.notifyAll();
			mutex.unlock();
		}
		void enter() {
			mutex.lock();
			while(closed) mutex.wait();
			enter_latch->countDown();
			if( enter_latch->await(0) ) {
				closed = true;
			}
			mutex.unlock();
		}
		void leave() {
			leave_latch->countDown();
		}
		void close() {
			leave_latch->await();
			delete leave_latch;
			delete enter_latch;
		}
};

class PointerTestThread : public Thread {
	private:
		Gate *_gate;
		Pointer<std::string> _s;

	public:
		PointerTestThread(Gate *gate) : _gate(gate) {}
		virtual ~PointerTestThread(){}

		void setString(Pointer<std::string> s) {_s = s; }

        virtual void run() {
			for(int j=0;j<1000;j++) {
				_gate->enter();
				_s.reset(NULL);
				_gate->leave();
			}

        }
};

int main(int argc, char* argv[])
{
	Pointer<PointerTestThread> thread[10];
	Gate gate;
	for(int i=0; i<10; i++) {
		thread[i].reset(new PointerTestThread(&gate));
		thread[i]->start();
	}
	for (int j=0;j<1000;j++) {
		// Put this in its own scope so that the main thread frees the string
		// before the threads.
		{
			Pointer<std::string> s(new std::string());
			for(int i=0; i<10; i++) thread[i]->setString(s);
		}
		// Signal the threads to free the string.
		gate.open(10);
		gate.close();
	}
	for(int i=0; i<10; i++) thread[i]->join();

	return 0;
}




> Segfault when destroying auto pointer managed objects
> -----------------------------------------------------
>
>                 Key: AMQCPP-242
>                 URL: https://issues.apache.org/activemq/browse/AMQCPP-242
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>          Components: Integration Tests
>    Affects Versions: 3.0
>         Environment: CentOS 5.2, RHEL 5.2, apr-1.3.3, apr-util-1.3.4
>            Reporter: Alexander Martens
>            Assignee: Timothy Bish
>
> Looks like integration tests may cause occasionally segmentation faults (3 chances in 165 tries), specially when releasing aut_ptr managed objects. The following three gdb sessions show similar crashes.
> TestRegistry.cpp was modified to run only OpenwireSimpleTest by commenting all other tests out in order to narrow the problem.
> Hope this helps,
>   Alex
> {noformat}
> Program terminated with signal 11, Segmentation fault.
> #0  0x00000011 in ?? ()
> (gdb) info threads
>   2 process 18477  0x007ad402 in __kernel_vsyscall ()
> * 1 process 18572  0x00000011 in ?? ()
> (gdb) bt full
> #0  0x00000011 in ?? ()
> No symbol table info available.
> #1  0x00a4ad98 in decaf::lang::Thread::runCallback (self=0x8742e08, param=0x878fb80) at decaf/lang/Thread.cpp:125
> No locals.
> #2  0x0050ea4c in dummy_worker (opaque=0x8742e08) at threadproc/unix/thread.c:142
>         thread = (apr_thread_t *) 0x8742e08
> #3  0x0062145b in start_thread () from /lib/libpthread.so.0
> No symbol table info available.
> #4  0x003a3c4e in clone () from /lib/libc.so.6
> No symbol table info available.
> (gdb) thread apply all bt full
> Thread 2 (process 18477):
> #0  0x007ad402 in __kernel_vsyscall ()
> No symbol table info available.
> #1  0x0039ca31 in select () from /lib/libc.so.6
> No symbol table info available.
> #2  0x0050fb8c in apr_sleep (t=50000) at time/unix/time.c:246
>         tv = {tv_sec = 0, tv_usec = 49000}
> #3  0x00a4aa9a in decaf::lang::Thread::sleep (millisecs=50) at decaf/lang/Thread.cpp:104
> No locals.
> #4  0x080566c6 in activemq::test::CMSTestFixture::tearDown (this=0x874c308) at ./activemq/test/CMSTestFixture.h:58
> No locals.
> #5  0x08052b44 in CppUnit::TestCaller<activemq::test::openwire::OpenwireSimpleTest>::tearDown (this=0x874c390)
>     at /usr/local/include/cppunit/TestCaller.h:182
> No locals.
> #6  0x00155bd7 in CppUnit::TestCaseMethodFunctor::operator() (this=0xbf978b74) at TestCase.cpp:32
> No locals.
> #7  0x001475ee in CppUnit::DefaultProtector::protect (this=0x874bf40, functor=@0xbf978b74, context=@0xbf978b0c) at DefaultProtector.cpp:15
> No locals.
> #8  0x001517a3 in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x874c130) at ProtectorChain.cpp:20
> No locals.
> #9  0x001514f5 in CppUnit::ProtectorChain::protect (this=0x874bce0, functor=@0xbf978b74, context=@0xbf978b0c) at ProtectorChain.cpp:77
>         __node_offset = <value optimized out>
>         functors = {<std::_Deque_base<CppUnit::Functor*,std::allocator<CppUnit::Functor*> >> = {
>     _M_impl = {<std::allocator<CppUnit::Functor*>> = {<__gnu_cxx::new_allocator<CppUnit::Functor*>> = {<No data fields>}, <No data fields>}, 
>       _M_map = 0x874fc58, _M_map_size = 8, _M_start = {_M_cur = 0x874cb10, _M_first = 0x874cb10, _M_last = 0x874cd10, _M_node = 0x874fc64}, _M_finish = {
>         _M_cur = 0x874cb14, _M_first = 0x874cb10, _M_last = 0x874cd10, _M_node = 0x874fc64}}}, <No data fields>}
>         outermostFunctor = (const class CppUnit::Functor &) @0xfffffdfe: Cannot access memory at address 0xfffffdfe
> Thread 1 (process 18572):
> #0  0x00000011 in ?? ()
> No symbol table info available.
> #1  0x00a4ad98 in decaf::lang::Thread::runCallback (self=0x8742e08, param=0x878fb80) at decaf/lang/Thread.cpp:125
> No locals.
> #2  0x0050ea4c in dummy_worker (opaque=0x8742e08) at threadproc/unix/thread.c:142
>         thread = (apr_thread_t *) 0x8742e08
> #3  0x0062145b in start_thread () from /lib/libpthread.so.0
> No symbol table info available.
> #4  0x003a3c4e in clone () from /lib/libc.so.6
> No symbol table info available.
> (gdb) q
> {noformat}
> {noformat}
> Program terminated with signal 11, Segmentation fault.
> #0  0x00855fb6 in activemq::transport::IOTransport::run (this=0x80d2588) at ./decaf/lang/Pointer.h:68
> 68                      delete this->counter;
> (gdb) info threads
>   3 process 24403  0x00bce402 in __kernel_vsyscall ()
>   2 process 24537  0x00bce402 in __kernel_vsyscall ()
> * 1 process 24769  0x00855fb6 in activemq::transport::IOTransport::run (this=0x80d2588) at ./decaf/lang/Pointer.h:68
> (gdb) thread apply all bt
> Thread 3 (process 24403):
> #0  0x00bce402 in __kernel_vsyscall ()
> #1  0x006254dc in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
> #2  0x00124f3e in apr_thread_cond_timedwait (cond=0x8118020, mutex=0x8116018, timeout=15000000) at locks/unix/thread_cond.c:89
> #3  0x007af72a in decaf::util::concurrent::Mutex::wait (this=0x80d3d9c, millisecs=15000) at decaf/util/concurrent/Mutex.cpp:116
> #4  0x007b48df in decaf::util::concurrent::CountDownLatch::await (this=0x80d3d94, timeOut=15000) at decaf/util/concurrent/CountDownLatch.cpp:69
> #5  0x0085538c in activemq::transport::correlator::FutureResponse::getResponse (this=0x80d3d90, timeout=15000)
>     at ./activemq/transport/correlator/FutureResponse.h:76
> #6  0x00854264 in activemq::transport::correlator::ResponseCorrelator::request (this=0x80d3488, command=@0xbfa9ef60, timeout=15000)
>     at activemq/transport/correlator/ResponseCorrelator.cpp:142
> #7  0x00a01fd0 in activemq::core::ActiveMQConnection::syncRequest (this=0x80d3590, command=
>       {<decaf::lang::AtomicRefCounter> = {counter = 0x3a98}, _vptr.Pointer = 0xbfa9ef60, value = 0x1}, timeout=15000)
>     at activemq/core/ActiveMQConnection.cpp:568
> #8  0x00a024c9 in activemq::core::ActiveMQConnection::disposeOf (this=0x80d3590, objectId=@0xbfa9efc4, timeout=15000)
>     at activemq/core/ActiveMQConnection.cpp:612
> #9  0x00a0285a in activemq::core::ActiveMQConnection::disconnect (this=0x80d3590) at activemq/core/ActiveMQConnection.cpp:335
> #10 0x00a06328 in activemq::core::ActiveMQConnection::close (this=0x80d3590) at activemq/core/ActiveMQConnection.cpp:246
> #11 0x0808327b in activemq::util::CMSProvider::close (this=0xbfa9f184) at activemq/util/CMSProvider.cpp:108
> #12 0x0808504a in ~CMSProvider (this=0xbfa9f184) at activemq/util/CMSProvider.cpp:56
> #13 0x08066d78 in activemq::test::SimpleTest::testQuickCreateAndDestroy (this=0x80ce468) at activemq/test/SimpleTest.cpp:335
> #14 0x08052ac7 in CppUnit::TestCaller<activemq::test::openwire::OpenwireSimpleTest>::runTest (this=0x80ce478) at /usr/local/include/cppunit/TestCaller.h:166
> #15 0x00ef3bd7 in CppUnit::TestCaseMethodFunctor::operator() (this=0xbfa9f494) at TestCase.cpp:32
> #16 0x00ee55ee in CppUnit::DefaultProtector::protect (this=0x80cdf40, functor=@0xbfa9f494, context=@0xbfa9f43c) at DefaultProtector.cpp:15
> #17 0x00eef7a3 in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x8110a70) at ProtectorChain.cpp:20
> #18 0x00eef4f5 in CppUnit::ProtectorChain::protect (this=0x80cdce0, functor=@0xbfa9f494, context=@0xbfa9f43c) at ProtectorChain.cpp:77
> #19 0x00efbe81 in CppUnit::TestResult::protect (this=0x80cda60, functor=@0xbfa9f494, test=0x80ce478, shortDescription=@0xbfa9f4b8) at TestResult.cpp:178
> #20 0x00ef38dd in CppUnit::TestCase::run (this=0x80ce478, result=0x80cda60) at TestCase.cpp:92
> #21 0x00ef423f in CppUnit::TestComposite::doRunChildTests (this=0x80ce010, controller=0x80cda60) at TestComposite.cpp:64
> #22 0x00ef417a in CppUnit::TestComposite::run (this=0x80ce010, result=0x80cda60) at TestComposite.cpp:23
> #23 0x00ef423f in CppUnit::TestComposite::doRunChildTests (this=0x80cdf80, controller=0x80cda60) at TestComposite.cpp:64
> #24 0x00ef417a in CppUnit::TestComposite::run (this=0x80cdf80, result=0x80cda60) at TestComposite.cpp:23
> #25 0x00efe440 in CppUnit::TestRunner::WrappingSuite::run (this=0x80cd570, result=0x80cda60) at TestRunner.cpp:47
> #26 0x00efbc1a in CppUnit::TestResult::runTest (this=0x80cda60, test=0x80cd570) at TestResult.cpp:145
> #27 0x00efe280 in CppUnit::TestRunner::run (this=0xbfa9f8e4, controller=@0x80cda60, testPath=@0xbfa9f904) at TestRunner.cpp:96
> #28 0x00f019db in CppUnit::TextTestRunner::run (this=0xbfa9f8e4, controller=@0x80cda60, testPath=@0xbfa9f904) at TextTestRunner.cpp:140
> #29 0x00f01a55 in CppUnit::TextTestRunner::run (this=0xbfa9f8e4, testName=
>         {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfa9f904 "��$"}}, doWait=false, doPrintResult=true, doPrintProgress=true) at TextTestRunner.cpp:64
> #30 0x0804ffc5 in main (argc=1, argv=0xbfa9f9c4) at main.cpp:77
> Thread 2 (process 24537):
> #0  0x00bce402 in __kernel_vsyscall ()
> #1  0x00627e1b in read () from /lib/libpthread.so.0
> #2  0x0012bdd6 in apr_socket_recv (sock=0x80f5b98, buf=0x80fbaa0 "", len=0xb7fc5120) at network_io/unix/sendrecv.c:81
> #3  0x00800f89 in decaf::net::SocketInputStream::read (this=0x80d1890, buffer=0x80fbaa0 "", offset=0, bufferSize=1) at decaf/net/SocketInputStream.cpp:179
> #4  0x00817e91 in decaf::io::BufferedInputStream::bufferData (this=0x80d1a10) at decaf/io/BufferedInputStream.cpp:260
> #5  0x00818491 in decaf::io::BufferedInputStream::read (this=0x80d1a10, targetBuffer=0x80d180e "", offset=0, targetBufferSize=4)
>     at decaf/io/BufferedInputStream.cpp:181
> #6  0x00825d07 in decaf::io::DataInputStream::readInt (this=0x80d17e0) at ./decaf/io/DataInputStream.h:375
> #7  0x00861528 in activemq::wireformat::openwire::OpenWireFormat::unmarshal (this=0x80d0ee8, transport=0x80d16d0, dis=0x80d17e0)
>     at activemq/wireformat/openwire/OpenWireFormat.cpp:250
> #8  0x00855f80 in activemq::transport::IOTransport::run (this=0x80d16d0) at activemq/transport/IOTransport.cpp:223
> #9  0x007acd98 in decaf::lang::Thread::runCallback (self=0x80c4f08, param=0x80d1790) at decaf/lang/Thread.cpp:125
> #10 0x00134a4c in dummy_worker (opaque=0x80c4f08) at threadproc/unix/thread.c:142
> #11 0x0062145b in start_thread () from /lib/libpthread.so.0
> #12 0x00578c4e in clone () from /lib/libc.so.6
> Thread 1 (process 24769):
> #0  0x00855fb6 in activemq::transport::IOTransport::run (this=0x80d2588) at ./decaf/lang/Pointer.h:68
> #1  0x007acd98 in decaf::lang::Thread::runCallback (self=0x80c5568, param=0x80d3560) at decaf/lang/Thread.cpp:125
> #2  0x00134a4c in dummy_worker (opaque=0x80c5568) at threadproc/unix/thread.c:142
> #3  0x0062145b in start_thread () from /lib/libpthread.so.0
> #4  0x00578c4e in clone () from /lib/libc.so.6
> (gdb) thread apply all bt full
> Thread 3 (process 24403):
> #0  0x00bce402 in __kernel_vsyscall ()
> No symbol table info available.
> #1  0x006254dc in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
> No symbol table info available.
> #2  0x00124f3e in apr_thread_cond_timedwait (cond=0x8118020, mutex=0x8116018, timeout=15000000) at locks/unix/thread_cond.c:89
>         rv = 12196256
>         then = 1241684283140354
>         abstime = {tv_sec = 1241684283, tv_nsec = 140354000}
> #3  0x007af72a in decaf::util::concurrent::Mutex::wait (this=0x80d3d9c, millisecs=15000) at decaf/util/concurrent/Mutex.cpp:116
>         lock_owner = 3086771968
>         lock_count = 1
>         waitEvent = (apr_thread_cond_t *) 0x8118020
>         subPool = (apr_pool_t *) 0x8117fe0
> #4  0x007b48df in decaf::util::concurrent::CountDownLatch::await (this=0x80d3d94, timeOut=15000) at decaf/util/concurrent/CountDownLatch.cpp:69
>         lock_W = {_vptr.Lock = 0x8096df8, locked = true, syncObject = 0x80d3d9c}
>         ex = {<decaf::lang::Throwable> = {<> = {<No data fields>}, <No data fields>}, message = {static npos = 4294967295, 
>     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
>       _M_p = 0x98da55 "\213]�\213u�\213}�\211�]��\004$\030"}}, cause = 0x80d25d0, 
>   stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>       _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0xbfa9ef60, 
>         _M_finish = 0x8, _M_end_of_storage = 0x2485d4}}, <No data fields>}}
> #5  0x0085538c in activemq::transport::correlator::FutureResponse::getResponse (this=0x80d3d90, timeout=15000)
>     at ./activemq/transport/correlator/FutureResponse.h:76
> No locals.
> #6  0x00854264 in activemq::transport::correlator::ResponseCorrelator::request (this=0x80d3488, command=@0xbfa9ef60, timeout=15000)
>     at activemq/transport/correlator/ResponseCorrelator.cpp:142
>         lock_W = {_vptr.Lock = 0x8096df8, locked = false, syncObject = 0x80d34c4}
>         response = {<decaf::lang::AtomicRefCounter> = {counter = 0x80f2fc0}, _vptr.Pointer = 0xb8c718, value = 0x0}
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {Cannot access memory at address 0x5f3f
> Thread 2 (process 24537):
> #0  0x00bce402 in __kernel_vsyscall ()
> No symbol table info available.
> #1  0x00627e1b in read () from /lib/libpthread.so.0
> No symbol table info available.
> #2  0x0012bdd6 in apr_socket_recv (sock=0x80f5b98, buf=0x80fbaa0 "", len=0xb7fc5120) at network_io/unix/sendrecv.c:81
>         rv = -1208200952
>         arv = 1199426
> #3  0x00800f89 in decaf::net::SocketInputStream::read (this=0x80d1890, buffer=0x80fbaa0 "", offset=0, bufferSize=1) at decaf/net/SocketInputStream.cpp:179
>         size = 1
>         result = <value optimized out>
> #4  0x00817e91 in decaf::io::BufferedInputStream::bufferData (this=0x80d1a10) at decaf/io/BufferedInputStream.cpp:260
>         available = 0
>         bytesRead = <value optimized out>
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = {<No data fields>}, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
>         _M_p = 0x124d42 "\211E�\213E�\203�\024[]�U\211�S\203�\024��>��\201�\226J\001"}}, cause = 0x80c0c7c, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0x8110928, 
>           _M_finish = 0xb7fc51c8, _M_end_of_storage = 0x807f0c1}}, <No data fields>}}, <No data fields>}
> #5  0x00818491 in decaf::io::BufferedInputStream::read (this=0x80d1a10, targetBuffer=0x80d180e "", offset=0, targetBufferSize=4)
>     at decaf/io/BufferedInputStream.cpp:181
>         bytesToCopy = 0
>         totalRead = 0
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = <invalid address>, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x80d1ee8 "\b\206�"}}, 
>     cause = 0xb7fc51fc, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0xb7fc5208, 
>           _M_finish = 0x0, _M_end_of_storage = 0xb7fc51f0}}, <No data fields>}}, <No data fields>}
> #6  0x00825d07 in decaf::io::DataInputStream::readInt (this=0x80d17e0) at ./decaf/io/DataInputStream.h:375
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = {<No data fields>}, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x80d1ee8 "\b\206�"}}, 
>     cause = 0x80d16d0, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0xb7fc5248, 
>           _M_finish = 0x5e6ff4, _M_end_of_storage = 0x5e8140}}, <No data fields>}}, <No data fields>}
> #7  0x00861528 in activemq::wireformat::openwire::OpenWireFormat::unmarshal (this=0x80d0ee8, transport=0x80d16d0, dis=0x80d17e0)
>     at activemq/wireformat/openwire/OpenWireFormat.cpp:250
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = {<No data fields>}, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xb7fc5298 "�R���\031�"}}, 
>     cause = 0x217731, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0x80fc820, 
>           _M_finish = 0xba19a0, _M_end_of_storage = 0xb7fc52a8}}, <No data fields>}}, <No data fields>}
> #8  0x00855f80 in activemq::transport::IOTransport::run (this=0x80d16d0) at activemq/transport/IOTransport.cpp:223
>         command = {<decaf::lang::AtomicRefCounter> = {counter = 0x80d1ee8}, _vptr.Pointer = 0xb8bb40, value = 0x80fc820}
> #9  0x007acd98 in decaf::lang::Thread::runCallback (self=0x80c4f08, param=0x80d1790) at decaf/lang/Thread.cpp:125
> No locals.
> #10 0x00134a4c in dummy_worker (opaque=0x80c4f08) at threadproc/unix/thread.c:142
>         thread = (apr_thread_t *) 0x80c4f08
> #11 0x0062145b in start_thread () from /lib/libpthread.so.0
> No symbol table info available.
> #12 0x00578c4e in clone () from /lib/libc.so.6
> No symbol table info available.
> Thread 1 (process 24769):
> #0  0x00855fb6 in activemq::transport::IOTransport::run (this=0x80d2588) at ./decaf/lang/Pointer.h:68
>         command = {<decaf::lang::AtomicRefCounter> = {counter = 0x80d3db0}, _vptr.Pointer = 0xb8bb40, value = 0x80f3438}
> #1  0x007acd98 in decaf::lang::Thread::runCallback (self=0x80c5568, param=0x80d3560) at decaf/lang/Thread.cpp:125
> No locals.
> #2  0x00134a4c in dummy_worker (opaque=0x80c5568) at threadproc/unix/thread.c:142
>         thread = (apr_thread_t *) 0x80c5568
> #3  0x0062145b in start_thread () from /lib/libpthread.so.0
> No symbol table info available.
> #4  0x00578c4e in clone () from /lib/libc.so.6
> No symbol table info available.
> (gdb) list
> 63               *
> 64               * @return true if the count is now zero.
> 65               */
> 66              bool release() {
> 67                  if( this->counter->decrementAndGet() == 0 ) {
> 68                      delete this->counter;
> 69                      return true;
> 70                  }
> 71                  return false;
> 72              }
> (gdb) up
> #1  0x007acd98 in decaf::lang::Thread::runCallback (self=0x80c5568, param=0x80d3560) at decaf/lang/Thread.cpp:125
> 125             thread->task->run();
> (gdb) list
> 120         // Get the instance.
> 121         Thread* thread = (Thread*)param;
> 122
> 123         // Invoke run on the task.
> 124         try{
> 125             thread->task->run();
> 126         } catch( ... ){
> 127             RuntimeException ex(
> 128                 __FILE__, __LINE__,
> 129                 "unhandled exception bubbled up to Thread::run");
> {noformat}
> {noformat}
> Program terminated with signal 11, Segmentation fault.
> #0  0x00000011 in ?? ()
> (gdb) info threads
>   3 process 5624  0x00be0402 in __kernel_vsyscall ()
>   2 process 5632  0x00be0402 in __kernel_vsyscall ()
> * 1 process 5500  0x00000011 in ?? ()
> (gdb) thread apply all bt full
> Thread 3 (process 5624):
> #0  0x00be0402 in __kernel_vsyscall ()
> No symbol table info available.
> #1  0x0014ae1b in read () from /lib/libpthread.so.0
> No symbol table info available.
> #2  0x00f96dd6 in apr_socket_recv (sock=0x9ee2b98, buf=0x9ee8aa0 "", len=0xb7fd8120) at network_io/unix/sendrecv.c:81
>         rv = -1208123128
>         arv = 6628709
> #3  0x0069df89 in decaf::net::SocketInputStream::read (this=0x9ebe8c0, buffer=0x9ee8aa0 "", offset=0, bufferSize=1) at decaf/net/SocketInputStream.cpp:179
>         size = 1
>         result = <value optimized out>
> #4  0x006b4e91 in decaf::io::BufferedInputStream::bufferData (this=0x9ebea40) at decaf/io/BufferedInputStream.cpp:260
>         available = 0
>         bytesRead = <value optimized out>
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = <invalid address>, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
>         _M_p = 0x92b460 "U\211�\203�(\211}�\213}\b\211u�\213u\f\211]��]���\201�&5\021"}}, cause = 0x9efef48, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0x146391, 
>           _M_finish = 0x415140, _M_end_of_storage = 0x95495a}}, <No data fields>}}, <No data fields>}
> #5  0x006b5491 in decaf::io::BufferedInputStream::read (this=0x9ebea40, targetBuffer=0x9ebe83e "", offset=0, targetBufferSize=4)
>     at decaf/io/BufferedInputStream.cpp:181
>         bytesToCopy = 0
>         totalRead = 0
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = {<No data fields>}, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x9ee9518 "�n�"}}, 
>     cause = 0xb7fd82f0, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0xb7fd81f8, 
>           _M_finish = 0x1, _M_end_of_storage = 0x0}}, <No data fields>}}, <No data fields>}
> #6  0x006c2d07 in decaf::io::DataInputStream::readInt (this=0x9ebe810) at ./decaf/io/DataInputStream.h:375
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = {<No data fields>}, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x9edf7d8 "���\t"}}, 
>     cause = 0x9ebe700, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0xb7fd8248, 
>           _M_finish = 0x147880, _M_end_of_storage = 0xb7fd8268}}, <No data fields>}}, <No data fields>}
> #7  0x006fe528 in activemq::wireformat::openwire::OpenWireFormat::unmarshal (this=0x9ebdf38, transport=0x9ebe700, dis=0x9ebe810)
>     at activemq/wireformat/openwire/OpenWireFormat.cpp:250
>         ex = {<decaf::lang::Exception> = {<decaf::lang::Throwable> = {<> = {<No data fields>}, <No data fields>}, message = {static npos = 4294967295, 
>       _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
>         _M_p = 0xb7fd82a8 "\030\203��\200/o"}}, cause = 0x652565, 
>     stackTrace = {<std::_Vector_base<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
>         _M_impl = {<std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<__gnu_cxx::new_allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >> = {<No data fields>}, <No data fields>}, _M_start = 0x9edf7dc, 
>           _M_finish = 0xa3e9a0, _M_end_of_storage = 0xb7fd82a8}}, <No data fields>}}, <No data fields>}
> #8  0x006f2f80 in activemq::transport::IOTransport::run (this=0x9ebe700) at activemq/transport/IOTransport.cpp:223
>         command = {<decaf::lang::AtomicRefCounter> = {counter = 0x9edf7d8}, _vptr.Pointer = 0xa28b40, value = 0x9efef48}
> #9  0x00649d98 in decaf::lang::Thread::runCallback (self=0x9eb1ec8, param=0x9ee9838) at decaf/lang/Thread.cpp:125
> No locals.
> #10 0x00f9fa4c in dummy_worker (opaque=0x9eb1ec8) at threadproc/unix/thread.c:142
>         thread = (apr_thread_t *) 0x9eb1ec8
> #11 0x0014445b in start_thread () from /lib/libpthread.so.0
> No symbol table info available.
> #12 0x003a5c4e in clone () from /lib/libc.so.6
> No symbol table info available.
> Thread 2 (process 5632):
> #0  0x00be0402 in __kernel_vsyscall ()
> No symbol table info available.
> #1  0x00148256 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
> No symbol table info available.
> #2  0x00f8fe83 in apr_thread_cond_wait (cond=0x9edb7b0, mutex=0x9ed5798) at locks/unix/thread_cond.c:68
>         rv = 166715416
> #3  0x0064c775 in decaf::util::concurrent::Mutex::wait (this=0x9efe008, millisecs=4294967295) at decaf/util/concurrent/Mutex.cpp:118
>         lock_owner = 3065867152
>         lock_count = 1
>         waitEvent = (apr_thread_cond_t *) 0x9edb7b0
>         subPool = (apr_pool_t *) 0x9edb770
> #4  0x0064c635 in decaf::util::concurrent::Mutex::wait (this=0x9efe008) at decaf/util/concurrent/Mutex.cpp:82
> No locals.
> #5  0x00892f85 in activemq::threads::DedicatedTaskRunner::run (this=0x9efe000) at activemq/threads/DedicatedTaskRunner.cpp:118
>         lock_W = {_vptr.Lock = 0x8096df8, locked = true, syncObject = 0x9efe008}
> #6  0x00649d98 in decaf::lang::Thread::runCallback (self=0x9eb1ee8, param=0x9ebb770) at decaf/lang/Thread.cpp:125
> No locals.
> #7  0x00f9fa4c in dummy_worker (opaque=0x9eb1ee8) at threadproc/unix/thread.c:142
>         thread = (apr_thread_t *) 0x9eb1ee8
> #8  0x0014445b in start_thread () from /lib/libpthread.so.0
> No symbol table info available.
> #9  0x003a5c4e in clone () from /lib/libc.so.6
> No symbol table info available.
> Thread 1 (process 5500):
> #0  0x00000011 in ?? ()
> No symbol table info available.
> #1  0x008ea35d in ~Message (this=0x9edf7ec) at activemq/commands/Message.cpp:68
> No locals.
> #2  0x00924793 in ~ActiveMQBytesMessage (this=0x9edf7e8) at ./activemq/commands/ActiveMQMessageTemplate.h:45
> No locals.
> #3  0x0806bc96 in activemq::test::SimpleTest::testBytesMessageSendRecv (this=0x9ebb438)
>     at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/memory:259
>         cpputMsg_ = {m_shortDescription = {static npos = 4294967295, 
>     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
>       _M_p = 0x9ee04bc "activemq/test/SimpleTest.cpp"}}, 
>   m_details = {<std::_Deque_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >> = {
>       _M_impl = {<std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<__gnu_cxx::new_allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<No data fields>}, <No data fields>}, _M_map = 0x9ee0548, _M_map_size = 8, _M_start = {
>           _M_cur = 0x9ee0570, _M_first = 0x9ee0570, _M_last = 0x9ee0770, _M_node = 0x9ee0554}, _M_finish = {_M_cur = 0x9ee0578, _M_first = 0x9ee0570, 
>           _M_last = 0x9ee0770, _M_node = 0x9ee0554}}}, <No data fields>}}
>         session = <value optimized out>
>         consumer = (class cms::MessageConsumer *) 0x9efe6c8
>         producer = (class cms::MessageProducer *) 0x9efea40
>         bytesMessage2 = (class cms::BytesMessage *) 0x9edf7e8
> #4  0x08052ac7 in CppUnit::TestCaller<activemq::test::openwire::OpenwireSimpleTest>::runTest (this=0x9ebb448) at /usr/local/include/cppunit/TestCaller.h:166
> No locals.
> #5  0x0019bbd7 in CppUnit::TestCaseMethodFunctor::operator() (this=0xbfac14b4) at TestCase.cpp:32
> No locals.
> #6  0x0018d5ee in CppUnit::DefaultProtector::protect (this=0x9ebaf40, functor=@0xbfac14b4, context=@0xbfac145c) at DefaultProtector.cpp:15
> No locals.
> #7  0x001977a3 in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x9efde60) at ProtectorChain.cpp:20
> No locals.
> #8  0x001974f5 in CppUnit::ProtectorChain::protect (this=0x9ebace0, functor=@0xbfac14b4, context=@0xbfac145c) at ProtectorChain.cpp:77
>         __node_offset = <value optimized out>
>         functors = {<std::_Deque_base<CppUnit::Functor*,std::allocator<CppUnit::Functor*> >> = {
>     _M_impl = {<std::allocator<CppUnit::Functor*>> = {<__gnu_cxx::new_allocator<CppUnit::Functor*>> = {<No data fields>}, <No data fields>}, 
>       _M_map = 0x9ebb2d0, _M_map_size = 8, _M_start = {_M_cur = 0x9ebbb10, _M_first = 0x9ebbb10, _M_last = 0x9ebbd10, _M_node = 0x9ebb2dc}, _M_finish = {
>         _M_cur = 0x9ebbb14, _M_first = 0x9ebbb10, _M_last = 0x9ebbd10, _M_node = 0x9ebb2dc}}}, <No data fields>}
>         outermostFunctor = (const class CppUnit::Functor &) @0x9edffa0: {_vptr.Functor = 0x0}
>         succeed = <value optimized out>
> #9  0x001a3e81 in CppUnit::TestResult::protect (this=0x9ebaa60, functor=@0xbfac14b4, test=0x9ebb448, shortDescription=@0xbfac14d8) at TestResult.cpp:178
>         context = {m_test = 0x9ebb448, m_result = 0x9ebaa60, m_shortDescription = {static npos = 4294967295, 
>     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x2a9bbc ""}}}
> #10 0x0019b8dd in CppUnit::TestCase::run (this=0x9ebb448, result=0x9ebaa60) at TestCase.cpp:92
> No locals.
> #11 0x0019c23f in CppUnit::TestComposite::doRunChildTests (this=0x9ebb010, controller=0x9ebaa60) at TestComposite.cpp:64
>         index = 9
>         childCount = 14
> #12 0x0019c17a in CppUnit::TestComposite::run (this=0x9ebb010, result=0x9ebaa60) at TestComposite.cpp:23
> No locals.
> #13 0x0019c23f in CppUnit::TestComposite::doRunChildTests (this=0x9ebaf80, controller=0x9ebaa60) at TestComposite.cpp:64
>         index = 1
>         childCount = 1
> #14 0x0019c17a in CppUnit::TestComposite::run (this=0x9ebaf80, result=0x9ebaa60) at TestComposite.cpp:23
> No locals.
> #15 0x001a6440 in CppUnit::TestRunner::WrappingSuite::run (this=0x9eba570, result=0x9ebaa60) at TestRunner.cpp:47
> No locals.
> #16 0x001a3c1a in CppUnit::TestResult::runTest (this=0x9ebaa60, test=0x9eba570) at TestResult.cpp:145
> No locals.
> #17 0x001a6280 in CppUnit::TestRunner::run (this=0xbfac1904, controller=@0x9ebaa60, testPath=@0xbfac1924) at TestRunner.cpp:96
>         path = {_vptr.TestPath = 0x1be1c8, m_tests = {<std::_Deque_base<CppUnit::Test*,std::allocator<CppUnit::Test*> >> = {
>       _M_impl = {<std::allocator<CppUnit::Test*>> = {<__gnu_cxx::new_allocator<CppUnit::Test*>> = {<No data fields>}, <No data fields>}, 
>         _M_map = 0x9ebb2a8, _M_map_size = 8, _M_start = {_M_cur = 0x9ebb908, _M_first = 0x9ebb908, _M_last = 0x9ebbb08, _M_node = 0x9ebb2b4}, _M_finish = {
>           _M_cur = 0x9ebb90c, _M_first = 0x9ebb908, _M_last = 0x9ebbb08, _M_node = 0x9ebb2b4}}}, <No data fields>}}
>         testToRun = (class CppUnit::Test *) 0x9edffa0
> #18 0x001a99db in CppUnit::TextTestRunner::run (this=0xbfac1904, controller=@0x9ebaa60, testPath=@0xbfac1924) at TextTestRunner.cpp:140
> No locals.
> #19 0x001a9a55 in CppUnit::TextTestRunner::run (this=0xbfac1904, testName=
>         {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfac1924 "�\233*"}}, doWait=false, doPrintResult=true, doPrintProgress=true) at TextTestRunner.cpp:64
>         progress = {<CppUnit::TestListener> = {_vptr.TestListener = 0x1be5e8}, <No data fields>}
> #20 0x0804ffc5 in main (argc=1, argv=0xbfac19e4) at main.cpp:77
>         runner = {<CppUnit::TestRunner> = {_vptr.TestRunner = 0x1be708, m_suite = 0x9eba570}, m_result = 0x9eba588, m_eventManager = 0x9ebaa60, 
>   m_outputter = 0x9ebaf50}
>         registry = (class CppUnit::TestFactoryRegistry &) @0x9eb60b8: {<CppUnit::TestFactory> = {_vptr.TestFactory = 0x1be0b0}, m_factories = {_M_t = {
>       _M_impl = {<std::allocator<std::_Rb_tree_node<CppUnit::TestFactory*> >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<CppUnit::TestFactory*> >> = {<No data fields>}, <No data fields>}, _M_key_compare = {<> = {<No data fields>}, <No data fields>}, _M_header = {_M_color = std::_S_red, 
>           _M_parent = 0x9eb6100, _M_left = 0x9eb6100, _M_right = 0x9eb6100}, _M_node_count = 1}}}, m_name = {static npos = 4294967295, 
>     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x9eb60a4 "All Tests"}}}
>         wasSuccessful = <value optimized out>
>         outputFile = <incomplete type>
>         useXMLOutputter = false
> (gdb) thread apply all bt
> Thread 3 (process 5624):
> #0  0x00be0402 in __kernel_vsyscall ()
> #1  0x0014ae1b in read () from /lib/libpthread.so.0
> #2  0x00f96dd6 in apr_socket_recv (sock=0x9ee2b98, buf=0x9ee8aa0 "", len=0xb7fd8120) at network_io/unix/sendrecv.c:81
> #3  0x0069df89 in decaf::net::SocketInputStream::read (this=0x9ebe8c0, buffer=0x9ee8aa0 "", offset=0, bufferSize=1) at decaf/net/SocketInputStream.cpp:179
> #4  0x006b4e91 in decaf::io::BufferedInputStream::bufferData (this=0x9ebea40) at decaf/io/BufferedInputStream.cpp:260
> #5  0x006b5491 in decaf::io::BufferedInputStream::read (this=0x9ebea40, targetBuffer=0x9ebe83e "", offset=0, targetBufferSize=4)
>     at decaf/io/BufferedInputStream.cpp:181
> #6  0x006c2d07 in decaf::io::DataInputStream::readInt (this=0x9ebe810) at ./decaf/io/DataInputStream.h:375
> #7  0x006fe528 in activemq::wireformat::openwire::OpenWireFormat::unmarshal (this=0x9ebdf38, transport=0x9ebe700, dis=0x9ebe810)
>     at activemq/wireformat/openwire/OpenWireFormat.cpp:250
> #8  0x006f2f80 in activemq::transport::IOTransport::run (this=0x9ebe700) at activemq/transport/IOTransport.cpp:223
> #9  0x00649d98 in decaf::lang::Thread::runCallback (self=0x9eb1ec8, param=0x9ee9838) at decaf/lang/Thread.cpp:125
> #10 0x00f9fa4c in dummy_worker (opaque=0x9eb1ec8) at threadproc/unix/thread.c:142
> #11 0x0014445b in start_thread () from /lib/libpthread.so.0
> #12 0x003a5c4e in clone () from /lib/libc.so.6
> Thread 2 (process 5632):
> #0  0x00be0402 in __kernel_vsyscall ()
> #1  0x00148256 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
> #2  0x00f8fe83 in apr_thread_cond_wait (cond=0x9edb7b0, mutex=0x9ed5798) at locks/unix/thread_cond.c:68
> #3  0x0064c775 in decaf::util::concurrent::Mutex::wait (this=0x9efe008, millisecs=4294967295) at decaf/util/concurrent/Mutex.cpp:118
> #4  0x0064c635 in decaf::util::concurrent::Mutex::wait (this=0x9efe008) at decaf/util/concurrent/Mutex.cpp:82
> #5  0x00892f85 in activemq::threads::DedicatedTaskRunner::run (this=0x9efe000) at activemq/threads/DedicatedTaskRunner.cpp:118
> #6  0x00649d98 in decaf::lang::Thread::runCallback (self=0x9eb1ee8, param=0x9ebb770) at decaf/lang/Thread.cpp:125
> #7  0x00f9fa4c in dummy_worker (opaque=0x9eb1ee8) at threadproc/unix/thread.c:142
> #8  0x0014445b in start_thread () from /lib/libpthread.so.0
> #9  0x003a5c4e in clone () from /lib/libc.so.6
> Thread 1 (process 5500):
> #0  0x00000011 in ?? ()
> #1  0x008ea35d in ~Message (this=0x9edf7ec) at activemq/commands/Message.cpp:68
> #2  0x00924793 in ~ActiveMQBytesMessage (this=0x9edf7e8) at ./activemq/commands/ActiveMQMessageTemplate.h:45
> #3  0x0806bc96 in activemq::test::SimpleTest::testBytesMessageSendRecv (this=0x9ebb438)
>     at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/memory:259
> #4  0x08052ac7 in CppUnit::TestCaller<activemq::test::openwire::OpenwireSimpleTest>::runTest (this=0x9ebb448) at /usr/local/include/cppunit/TestCaller.h:166
> #5  0x0019bbd7 in CppUnit::TestCaseMethodFunctor::operator() (this=0xbfac14b4) at TestCase.cpp:32
> #6  0x0018d5ee in CppUnit::DefaultProtector::protect (this=0x9ebaf40, functor=@0xbfac14b4, context=@0xbfac145c) at DefaultProtector.cpp:15
> #7  0x001977a3 in CppUnit::ProtectorChain::ProtectFunctor::operator() (this=0x9efde60) at ProtectorChain.cpp:20
> #8  0x001974f5 in CppUnit::ProtectorChain::protect (this=0x9ebace0, functor=@0xbfac14b4, context=@0xbfac145c) at ProtectorChain.cpp:77
> #9  0x001a3e81 in CppUnit::TestResult::protect (this=0x9ebaa60, functor=@0xbfac14b4, test=0x9ebb448, shortDescription=@0xbfac14d8) at TestResult.cpp:178
> #10 0x0019b8dd in CppUnit::TestCase::run (this=0x9ebb448, result=0x9ebaa60) at TestCase.cpp:92
> #11 0x0019c23f in CppUnit::TestComposite::doRunChildTests (this=0x9ebb010, controller=0x9ebaa60) at TestComposite.cpp:64
> #12 0x0019c17a in CppUnit::TestComposite::run (this=0x9ebb010, result=0x9ebaa60) at TestComposite.cpp:23
> #13 0x0019c23f in CppUnit::TestComposite::doRunChildTests (this=0x9ebaf80, controller=0x9ebaa60) at TestComposite.cpp:64
> #14 0x0019c17a in CppUnit::TestComposite::run (this=0x9ebaf80, result=0x9ebaa60) at TestComposite.cpp:23
> #15 0x001a6440 in CppUnit::TestRunner::WrappingSuite::run (this=0x9eba570, result=0x9ebaa60) at TestRunner.cpp:47
> #16 0x001a3c1a in CppUnit::TestResult::runTest (this=0x9ebaa60, test=0x9eba570) at TestResult.cpp:145
> #17 0x001a6280 in CppUnit::TestRunner::run (this=0xbfac1904, controller=@0x9ebaa60, testPath=@0xbfac1924) at TestRunner.cpp:96
> #18 0x001a99db in CppUnit::TextTestRunner::run (this=0xbfac1904, controller=@0x9ebaa60, testPath=@0xbfac1924) at TextTestRunner.cpp:140
> #19 0x001a9a55 in CppUnit::TextTestRunner::run (this=0xbfac1904, testName=
>         {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfac1924 "�\233*"}}, doWait=false, doPrintResult=true, doPrintProgress=true) at TextTestRunner.cpp:64
> #20 0x0804ffc5 in main (argc=1, argv=0xbfac19e4) at main.cpp:77
> (gdb) up
> #1  0x008ea35d in ~Message (this=0x9edf7ec) at activemq/commands/Message.cpp:68
> 68      }
> (gdb) list
> 63          this->brokerOutTime = 0;
> 64      }
> 65
> 66      ////////////////////////////////////////////////////////////////////////////////
> 67      Message::~Message() {
> 68      }
> 69
> 70      ////////////////////////////////////////////////////////////////////////////////
> 71      Message* Message::cloneDataStructure() const {
> 72          std::auto_ptr<Message> message( new Message() );
> (gdb) p this
> $1 = (class activemq::commands::Message * const) 0x9edf7ec
> (gdb) p *this
> $2 = {<activemq::commands::BaseCommand> = {<activemq::commands::Command> = {<activemq::commands::BaseDataStructure> = {<activemq::commands::DataStructure> = {<activemq::wireformat::MarshalAware> = {_vptr.MarshalAware = 0xa39108}, <No data fields>}, <No data fields>}, <No data fields>}, responseRequired = false, 
>     commandId = 5}, ackHandler = 0x0, 
>   properties = {<decaf::util::StlMap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,activemq::util::PrimitiveValueNode,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >> = {<decaf::util::Map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,activemq::util::PrimitiveValueNode,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >> = {<decaf::util::concurrent::Synchronizable> = {_vptr.Synchronizable = 0xa34be8}, <No data fields>}, valueMap = {_M_t = {
>           _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, activemq::util::PrimitiveValueNode> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, activemq::util::PrimitiveValueNode> > >> = {<No data fields>}, <No data fields>}, _M_key_compare = {<> = {<No data fields>}, <No data fields>}, 
>             _M_header = {_M_color = std::_S_red, _M_parent = 0x0, _M_left = 0x9edf804, _M_right = 0x9edf804}, _M_node_count = 0}}}, 
>       mutex = {<decaf::util::concurrent::Synchronizable> = {_vptr.Synchronizable = 0xa25468}, aprPool = {_vptr.AprPool = 0xa25fa8, aprPool = 0x9f543f0}, 
>         mutex = 0x9f54430, eventQ = {<std::_List_base<apr_thread_cond_t*,std::allocator<apr_thread_cond_t*> >> = {
>             _M_impl = {<std::allocator<std::_List_node<apr_thread_cond_t*> >> = {<__gnu_cxx::new_allocator<std::_List_node<apr_thread_cond_t*> >> = {<No data fields>}, <No data fields>}, _M_node = {_M_next = 0x9edf828, _M_prev = 0x9edf828}}}, <No data fields>}, lock_owner = 0, lock_count = 0}}, converter = {
>       _vptr.PrimitiveValueConverter = 0xa2d9b0}}, readOnlyProperties = true, readOnlyBody = true, static DEFAULT_MESSAGE_SIZE = 1024, 
>   producerId = {<decaf::lang::AtomicRefCounter> = {counter = 0x9ee0250}, _vptr.Pointer = 0xa2aca0, value = 0x9ee01a8}, 
>   destination = {<decaf::lang::AtomicRefCounter> = {counter = 0x9ebeee0}, _vptr.Pointer = 0xa2acf0, value = 0x9ee0260}, 
>   transactionId = {<decaf::lang::AtomicRefCounter> = {counter = 0x9ee02d0}, _vptr.Pointer = 0xa2a938, value = 0x0}, 
>   originalDestination = {<decaf::lang::AtomicRefCounter> = {counter = 0x9edfc08}, _vptr.Pointer = 0xa2acf0, value = 0x0}, 
>   messageId = {<decaf::lang::AtomicRefCounter> = {counter = 0x9edfc18}, _vptr.Pointer = 0xa2acc8, value = 0x9ee02e0}, 
>   originalTransactionId = {<decaf::lang::AtomicRefCounter> = {counter = 0x9edfc28}, _vptr.Pointer = 0xa2a938, value = 0x0}, groupID = {
>     static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
>       _M_p = 0x2a9bbc ""}}, groupSequence = 0, correlationId = {static npos = 4294967295, 
>     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x2a9bbc ""}}, 
>   persistent = false, expiration = 0, priority = 4 '\004', replyTo = {<decaf::lang::AtomicRefCounter> = {counter = 0x9edff98}, _vptr.Pointer = 0xa2acf0, 
>     value = 0x0}, timestamp = 1241684145316, type = {static npos = 4294967295, 
>     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x2a9bbc ""}}, 
>   content = {<std::_Vector_base<unsigned char,std::allocator<unsigned char> >> = {
>       _M_impl = {<std::allocator<unsigned char>> = {<__gnu_cxx::new_allocator<unsigned char>> = {<No data fields>}, <No data fields>}, 
>         _M_start = 0x9ee0490 "", _M_finish = 0x9ee04aa "il1\005", _M_end_of_storage = 0x9ee04aa "il1\005"}}, <No data fields>}, 
>   marshalledProperties = {<std::_Vector_base<unsigned char,std::allocator<unsigned char> >> = {
>       _M_impl = {<std::allocator<unsigned char>> = {<__gnu_cxx::new_allocator<unsigned char>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, 
>         _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}, dataStructure = {<decaf::lang::AtomicRefCounter> = {counter = 0x9edffa8}, 
>     _vptr.Pointer = 0xa2a248, value = 0x0}, targetConsumerId = {<decaf::lang::AtomicRefCounter> = {counter = 0x9edffb8}, _vptr.Pointer = 0xa2aad8, 
>     value = 0x0}, compressed = false, redeliveryCounter = 0, 
>   brokerPath = {<std::_Vector_base<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter>,std::allocator<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter> > >> = {
>       _M_impl = {<std::allocator<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter> >> = {<__gnu_cxx::new_allocator<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter> >> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, 
>         _M_end_of_storage = 0x0}}, <No data fields>}, arrival = 0, userID = {static npos = 4294967295, 
>     _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x2a9bbc ""}}, 
>   recievedByDFBridge = false, droppable = false, 
>   cluster = {<std::_Vector_base<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter>,std::allocator<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter> > >> = {
>       _M_impl = {<std::allocator<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter> >> = {<__gnu_cxx::new_allocator<decaf::lang::Pointer<activemq::commands::BrokerId, decaf::lang::AtomicRefCounter> >> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, 
>         _M_end_of_storage = 0x0}}, <No data fields>}, brokerInTime = 1241684145317, brokerOutTime = 1241684145317, static ID_MESSAGE = 0 '\0'}
> {noformat}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.