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

Nathan Mittler commented on AMQCPP-46:
--------------------------------------

Albert,
I've made some updates to trunk to do the automatic closing of comsumers and 
producers when you close the session.  Could you give that a try?

> 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, main.cpp
>
>
> 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.
-
You can reply to this email to add a comment to the issue online.

Reply via email to