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