[ 
https://issues.apache.org/activemq/browse/AMQCPP-46?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_37930
 ] 

Albert Strasheim commented on AMQCPP-46:
----------------------------------------

> There does appear to be a disconnect on the listener chain.

If I understand this correctly, you agree that there is an issue with 
ActiveMQConnection?

Here's some code to reproduce the problem with exceptions I'm seeing (after 
applying my patch). You can paste this code over the stuff in 
vs2005-activemq-example -- it's probably the quickest way to get it building.

{noformat}
#include <activemq/core/ActiveMQConnectionFactory.h>
#include <cms/ExceptionListener.h>
#include <cms/Session.h>
#include <iostream>

struct ExceptionListener : public cms::ExceptionListener {
    bool error;

    ExceptionListener() : error(false) {}

    virtual ~ExceptionListener(void) {}
   
    virtual void onException( const cms::CMSException& ex ) {
        std::cout << "Got an exception in listener: " << ex.getMessage() << 
std::endl;
        error = true;
    }
};
    
int main(int argc, char* argv[]) {
    ExceptionListener exListener;
    activemq::core::ActiveMQConnectionFactory* connectionFactory =
        new activemq::core::ActiveMQConnectionFactory("tcp://127.0.0.1:61613");
    while (true) {
        cms::Connection* connection = 0;
        cms::Session* session = 0;
        cms::Destination* destination = 0;
        cms::MessageConsumer* consumer = 0;
        try {
            while (!exListener.error) {
                connection = connectionFactory->createConnection();
                connection->setExceptionListener(&exListener);
                session = connection->createSession( 
cms::Session::AUTO_ACKNOWLEDGE );
                destination = session->createTopic( "TEST.FOO" );
                consumer = session->createConsumer( destination );
                connection->start();
                cms::Message* message = consumer->receive(10000);
                delete message;
                message = 0;
            }
        } catch ( cms::CMSException& ex ) {
            std::cout << "Got an exception: " << ex.getMessage() << std::endl;
        }
        delete consumer;
        consumer = 0;
        delete destination;
        destination = 0;
        delete session;
        session = 0;
        delete connection;
        connection = 0;
        exListener.error = false;
    }
    delete connectionFactory;
    connectionFactory = 0;
    return 0;
}
{noformat}

Use it as follows:

Compile in debug mode in Visual Studio and run the program (without a running 
broker).

You should see: Got an exception: Socket::connect - No error as it retries the 
createConnection part.

Start the broker. It should establish a connection and block on receive.

Kill the broker. You should see:

WARNING: activemq::io::SocketInputStream::read - An existing connection was 
forcibly closed by the remote host.
        FILE: ..\src\main\activemq\network\SocketInputStream.cpp, LINE: 171
        FILE: ..\src\main\activemq\io\BufferedInputStream.cpp, LINE: 158
        FILE: ..\src\main\activemq\io\BufferedInputStream.cpp, LINE: 81
        FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, 
LINE: 216
        FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, 
LINE: 120
        FILE: ..\src\main\activemq\connector\stomp\StompCommandReader.cpp, 
LINE: 71
        FILE: ..\src\main\activemq\transport\IOTransport.cpp, LINE: 165
 - tid: 7252
Got an exception in listener: activemq::io::SocketInputStream::read - An 
existing connection was forcibly closed by the remote host.

Then the application crashes. I get this dialog box:

{noformat}
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Error!

Program: ...

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

(Press Retry to debug the application)
---------------------------
Abort   Retry   Ignore   
---------------------------
{noformat}

If I debug in Visual Studio, my stack looks like this:

{noformat}
        msvcr80d.dll!10202b13()         
        [Frames below may be incorrect and/or missing, no symbols loaded for 
msvcr80d.dll]      
        ntdll.dll!7c96d886()    
...
        kernel32.dll!7c812a5b()         
>       
> vs2005-activemq-example.exe!std::vector<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> > 
> >::_Ucopy<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>  >,int> 
> *>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>  >,int> * _First=("..\src\main\activemq\network\SocketOutputStream.cpp",85), 
> std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
> >,int> * _Last=(<Bad Ptr>,3473888), 
> std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
> >,int> * _Ptr=("..\src\main\activemq\network\SocketOutputStream.cpp",85))  
> Line 1105 + 0x18 bytes      C++
        
vs2005-activemq-example.exe!std::vector<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> > >::operator=(const 
std::vector<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> > > & _Right={...})  Line 582 + 0x1d bytes       C++
        0012de6c()      
        vs2005-activemq-example.exe!activemq::transport::IOTransport::close()  
Line 144 + 0x37 bytes    C++
        msvcr80d.dll!10243137()         
...
        msvcr80d.dll!10243990()         
        
vs2005-activemq-example.exe!activemq::network::SocketOutputStream::write(const 
unsigned char * buffer=0x0035d358, int len=83)  Line 89  C++
        
vs2005-activemq-example.exe!activemq::io::BufferedOutputStream::emptyBuffer()  
Line 76  C++
        vs2005-activemq-example.exe!activemq::io::BufferedOutputStream::flush() 
 Line 86        C++
        vs2005-activemq-example.exe!activemq::io::BufferedOutputStream::close() 
 Line 67        C++
        vs2005-activemq-example.exe!activemq::transport::IOTransport::close()  
Line 141 C++
        
vs2005-activemq-example.exe!activemq::transport::IOTransport::~IOTransport()  
Line 48   C++
        vs2005-activemq-example.exe!activemq::transport::IOTransport::`scalar 
deleting destructor'()  + 0xf bytes       C++
        
vs2005-activemq-example.exe!activemq::transport::TransportFilter::~TransportFilter()
  Line 115 + 0x23 bytes     C++
        
vs2005-activemq-example.exe!activemq::transport::TcpTransport::~TcpTransport()  
Line 72 + 0xf bytes     C++
        vs2005-activemq-example.exe!activemq::transport::TcpTransport::`scalar 
deleting destructor'()  + 0xf bytes      C++
        
vs2005-activemq-example.exe!activemq::transport::TransportFilter::~TransportFilter()
  Line 115 + 0x23 bytes     C++
        msvcr80d.dll!10243137()         
...
        kernel32.dll!7c812a5b()         
        
vs2005-activemq-example.exe!std::vector<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> > 
>::_Ucopy<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,int> 
*>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
>,int> * _First=("..\src\main\activemq\network\SocketOutputStream.cpp",85), 
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
>,int> * _Last=(<Bad Ptr>,3473816), 
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
>,int> * _Ptr=("..\src\main\activemq\network\SocketOutputStream.cpp",85))  Line 
1105 + 0x18 bytes      C++
        
vs2005-activemq-example.exe!std::vector<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> > >::operator=(const 
std::vector<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> > > & _Right={...})  Line 582 + 0x1d bytes       C++
        0012f1a0()      
        vs2005-activemq-example.exe!activemq::transport::IOTransport::close()  
Line 144 + 0x37 bytes    C++
        msvcr80d.dll!10243137()         
...
        msvcr80d.dll!10243990()         
        
vs2005-activemq-example.exe!activemq::network::SocketOutputStream::write(const 
unsigned char * buffer=0x0035d358, int len=83)  Line 89  C++
        
vs2005-activemq-example.exe!activemq::io::BufferedOutputStream::emptyBuffer()  
Line 76  C++
        vs2005-activemq-example.exe!activemq::io::BufferedOutputStream::flush() 
 Line 86        C++
        vs2005-activemq-example.exe!activemq::io::BufferedOutputStream::close() 
 Line 67        C++
        vs2005-activemq-example.exe!activemq::transport::IOTransport::close()  
Line 141 C++
        
vs2005-activemq-example.exe!activemq::transport::TransportFilter::close()  Line 
226     C++
        
vs2005-activemq-example.exe!activemq::transport::ResponseCorrelator::close()  
Line 363  C++
        
vs2005-activemq-example.exe!activemq::transport::ResponseCorrelator::~ResponseCorrelator()
  Line 120    C++
        
vs2005-activemq-example.exe!activemq::transport::ResponseCorrelator::`scalar 
deleting destructor'()  + 0xf bytes        C++
        
vs2005-activemq-example.exe!activemq::core::ActiveMQConnectionData::close()  
Line 123 + 0x38 bytes      C++
        
vs2005-activemq-example.exe!activemq::core::ActiveMQConnectionData::~ActiveMQConnectionData()
  Line 77  C++
        
vs2005-activemq-example.exe!activemq::core::ActiveMQConnectionData::`scalar 
deleting destructor'()  + 0xf bytes C++
        vs2005-activemq-example.exe!activemq::core::ActiveMQConnection::close() 
 Line 107 + 0x26 bytes  C++
        
vs2005-activemq-example.exe!activemq::core::ActiveMQConnection::~ActiveMQConnection()
  Line 49 + 0xb bytes      C++
        vs2005-activemq-example.exe!activemq::core::ActiveMQConnection::`scalar 
deleting destructor'()  + 0xf bytes     C++
        vs2005-activemq-example.exe!main(int argc=1, char * * argv=0x00356078)  
Line 49 + 0x34 bytes    C++
        vs2005-activemq-example.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes  
C
        vs2005-activemq-example.exe!mainCRTStartup()  Line 403  C
        kernel32.dll!7c816fd7()         
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=(<Bad Ptr>,119), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=("",HEADER_DESTINATION))  Line 918 + 0x9e bytes      C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=(<Bad Ptr>,119), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=("",HEADER_DESTINATION))  Line 918 + 0x9e bytes      C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=(<Bad Ptr>,119), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=("",HEADER_DESTINATION))  Line 918 + 0x9e bytes      C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=(<Bad Ptr>,119), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=("",HEADER_DESTINATION))  Line 918 + 0x9e bytes      C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=("÷",-503724384), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=("",HEADER_DESTINATION))  Line 918 + 0x9e bytes     C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=("÷",-503724384), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=("‹@",-511349080))  Line 918 + 0x9e bytes   C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=("÷",-503724384), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=(<Bad Ptr>,394))  Line 918 + 0x9e bytes     C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=("÷",-503724384), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=(<Bad Ptr>,394))  Line 918 + 0x9e bytes     C++
        
vs2005-activemq-example.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _First=("÷",-503724384), 
std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > 
>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
 > const ,enum 
activemq::connector::stomp::commands::CommandConstants::StompHeader> >,0> 
>::iterator _Last=(<Bad Ptr>,394))  Line 918 + 0x9e bytes     C++
{noformat}

> ActiveMQConnection doesn't propagate exception listener to underlying 
> connector
> -------------------------------------------------------------------------------
>
>                 Key: AMQCPP-46
>                 URL: https://issues.apache.org/activemq/browse/AMQCPP-46
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>    Affects Versions: 1.1
>            Reporter: Albert Strasheim
>         Assigned To: Nathan Mittler
>             Fix For: 2.0
>
>         Attachments: amqconn-exlistener.diff
>
>
> My program is doing the following:
> # Create connection using ActiveMQConnectionFactory
> # Set a simple exception listener that sets a boolean flag
> # Block in receive on consumer
> If I then kill the broker, various exceptions happen, but they are never sent 
> to the exception listener, because the exception listener in StompConnector 
> is null. It seems to me that ActiveMQConnection should set and get its 
> exception listener on its underlying connector and probably doesn't have to 
> contain a pointer to the listener itself.
> If I change ActiveMQConnection as in the attached patch to also set the 
> exception listener on the underlying connector, my exception listener gets 
> called when the broker dies.
> Once I detect the failure, I delete the producer, consumer, session and 
> connection that failed. Looks like an uncaught exception is getting thrown 
> during the destruction of the producer (which is the first thing I delete 
> when cleaning up). The problem here is probably that the connection is trying 
> to close down a socket that is already broken and something goes awry. I'm 
> not quite sure how to fix this problem.
> Stack trace (with useless bits stripped out):
> {noformat}
>       kernel32.dll!7c812a5b()         
>       [Frames below may be incorrect and/or missing, no symbols loaded for 
> kernel32.dll]      
>       kernel32.dll!7c812a5b()         
> >     
> > myapp.exe!std::vector<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> > 
> > >::_Ucopy<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >  >,int> 
> > *>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >  >,int> * 
> > _First=("..\src\main\activemq\connector\stomp\StompSessionManager.cpp",254),
> >  
> > std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >  >,int> * _Last=(<Bad Ptr>,14297048), 
> > std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >  >,int> * 
> > _Ptr=("..\src\main\activemq\connector\stomp\StompSessionManager.cpp",254))  
> > Line 1105 + 0x18 bytes   C++
>       
> myapp.exe!std::vector<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> > >::operator=(const 
> std::vector<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> > > & _Right={...})  Line 582 + 0x1d bytes C++
>       0012b920()      
>       myapp.exe!activemq::core::ActiveMQConsumer::close()  Line 84 + 0x34 
> bytes       C++
>       msvcr80d.dll!102418b7()         
>         ...   
>       kernel32.dll!7c812a5b()         
>       
> myapp.exe!std::vector<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> > 
> >::_Ucopy<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>  >,int> 
> *>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>  >,int> * _First=(<Bad Ptr>,-17891602), 
> std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
> >,int> * _Last=(<Bad Ptr>,-17891602), 
> std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
> >,int> * _Ptr=(<Bad Ptr>,1886220148))  Line 1105 + 0x18 bytes       C++
>       
> myapp!std::vector<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> > >::operator=(const 
> std::vector<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> > > & _Right={...})  Line 582 + 0x1d bytes     C++
>       0012bf74()      
>       
> myapp.exe!activemq::core::ActiveMQSession::onDestroySessionResource(activemq::core::ActiveMQSessionResource
>  * resource=0x00000001)  Line 558 + 0x37 bytes       C++
>       msvcr80d.dll!10241a10()         
>         ...   
>       kernel32.dll!7c812a5b()         
>       
> myapp.exe!std::vector<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> > 
> >::_Ucopy<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>  >,int> 
> *>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>  >,int> * _First=(<Bad Ptr>,1886220148), 
> std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
> >,int> * _Last=(<Bad Ptr>,-17891602), 
> std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> 
> >,int> * _Ptr=("<<U",4832632))  Line 1105 + 0x18 bytes     C++
>       
> myapp.exe!std::vector<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> > >::operator=(const 
> std::vector<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> > > & _Right={...})  Line 582 + 0x1d bytes C++
> {noformat}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to