Details
Description
We are experiencing SIGABRTs during attempts to disconnect a client from the broker by calling the destructor of ActiveMQConnection.
Here's the portion of the stack trace that includes activemq-cpp code:
(gdb) bt #3 <signal handler called> #4 0x00007f98ce2fe925 in raise () from /lib64/libc.so.6 #5 0x00007f98ce300105 in abort () from /lib64/libc.so.6 #6 0x00007f98cafd1a5d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib64/libstdc++.so.6 #7 0x00007f98cafcfbe6 in ?? () from /usr/lib64/libstdc++.so.6 #8 0x00007f98cafcfc13 in std::terminate() () from /usr/lib64/libstdc++.so.6 #9 0x00007f98cafd053f in __cxa_pure_virtual () from /usr/lib64/libstdc++.so.6 #10 0x00007f98cd891e8b in decaf::util::concurrent::Lock::lock() () from /usr/lib64/libactivemq-cpp.so.18 #11 0x00007f98cd891fa5 in decaf::util::concurrent::Lock::Lock(decaf::util::concurrent::Synchronizable*, bool) () from /usr/lib64/libactivemq-cpp.so.18 #12 0x00007f98cd538d0d in activemq::core::ConnectionConfig::~ConnectionConfig() () from /usr/lib64/libactivemq-cpp.so.18 #13 0x00007f98cd4f39c2 in activemq::core::ActiveMQConnection::~ActiveMQConnection() () from /usr/lib64/libactivemq-cpp.so.18 #14 0x00007f98cd4f3b69 in activemq::core::ActiveMQConnection::~ActiveMQConnection() () from /usr/lib64/libactivemq-cpp.so.18
The call to __cxa_pure_virtual() in frame 9 indicates that decaf::util::concurrent::Lock::lock() is calling a pure virtual function. Since this is happening within destructor calls (of both ActiveMQConnection and ConnectionConfig), it has evidently triggered std::terminate from libstdc++, and hence the abort.