activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Albert Strasheim (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQCPP-46) ActiveMQConnection doesn't propagate exception listener to underlying connector
Date Wed, 24 Jan 2007 16:06:02 GMT

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

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

Think I've found a crash. In the code I'll attach the crash happens if consumer2 is not closed
before it is deleted (seems like this should be possible?).

Stack looks like this:

{noformat}
>	vs2005-activemq-example.exe!activemq::core::ActiveMQSession::getAcknowledgeMode()  Line
465 + 0x17 bytes	C++
 	vs2005-activemq-example.exe!activemq::core::ActiveMQConsumer::dispatch(activemq::core::ActiveMQMessage
* message=0x00b42428)  Line 395 + 0x19 bytes	C++
 	vs2005-activemq-example.exe!activemq::core::ActiveMQConsumer::onActiveMQMessage(activemq::core::ActiveMQMessage
* message=0x00b42428)  Line 449 + 0x1b bytes	C++
 	vs2005-activemq-example.exe!activemq::core::ActiveMQConnection::onConsumerMessage(activemq::connector::ConsumerInfo
* consumer=0x00b40af0, activemq::core::ActiveMQMessage * message=0x00b42428)  Line 196	C++
 	vs2005-activemq-example.exe!activemq::connector::stomp::StompSessionManager::onStompCommand(activemq::connector::stomp::commands::StompCommand
* command=0x00b410d0)  Line 329	C++
 	vs2005-activemq-example.exe!activemq::connector::stomp::StompConnector::onCommand(activemq::transport::Command
* command=0x00b410d4)  Line 781	C++
 	vs2005-activemq-example.exe!activemq::transport::TransportFilter::fire(activemq::transport::Command
* command=0x00b410d4)  Line 88	C++
 	vs2005-activemq-example.exe!activemq::transport::ResponseCorrelator::onCommand(activemq::transport::Command
* command=0x00b410d4)  Line 168	C++
 	vs2005-activemq-example.exe!activemq::transport::TransportFilter::fire(activemq::transport::Command
* command=0x00b410d4)  Line 88	C++
 	vs2005-activemq-example.exe!activemq::transport::TransportFilter::onCommand(activemq::transport::Command
* command=0x00b410d4)  Line 127	C++
 	vs2005-activemq-example.exe!activemq::transport::IOTransport::fire(activemq::transport::Command
* command=0x00b410d4)  Line 125 + 0x17 bytes	C++
 	vs2005-activemq-example.exe!activemq::transport::IOTransport::run()  Line 161	C++
 	vs2005-activemq-example.exe!activemq::concurrent::Thread::runCallback(void * param=0x0035f2f8)
 Line 152 + 0x13 bytes	C++
 	msvcr80d.dll!102047c1() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for msvcr80d.dll]	
 	msvcr80d.dll!10204767() 	
 	kernel32.dll!7c80b683() 	
{noformat}

Crash happens because the connector resource inside the session's sessionInfo is invalid.

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


Mime
View raw message