activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Timothy Bish (JIRA)" <j...@apache.org>
Subject [jira] Updated: (AMQCPP-126) closing ressources after an IOException crashes the app
Date Tue, 12 Jun 2007 14:28:33 GMT

     [ https://issues.apache.org/activemq/browse/AMQCPP-126?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Timothy Bish updated AMQCPP-126:
--------------------------------

    Fix Version/s: 2.1

> closing ressources after an IOException crashes the app
> -------------------------------------------------------
>
>                 Key: AMQCPP-126
>                 URL: https://issues.apache.org/activemq/browse/AMQCPP-126
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>          Components: CMS Impl
>    Affects Versions: 2.0.1
>         Environment: tested on Windows 2000
>            Reporter: olivier renaud
>            Assignee: Nathan Mittler
>             Fix For: 2.1
>
>
> When a network error occurs, I want to clean up all the created objects and close the
connection and the session.
> So, when I catch an exception (activemq::io::IOException), either created by from producer.send,
or by an asynchronous notification on the ExceptionListener object set for the Connection.
> However, closing ressources (Consumer, Producer, or Session) always crash the application.
This can be seen with the Example code in ActiveMQCPP sources :
> - run the example program so that it connects to a distant host (not localhost)
> - physically unplug the network (or shutdown the network connection), and wait
> The program stops with the following message :
> {quote}
> ...
> Sent message #334 from thread 1216
> Sent message #335 from thread 1216
> Message #335 Received: Hello world! from thread 1216
> JMS Exception occured.  Shutting down client.
> response from futureResponse was invalid
>         FILE: ..\src\main\activemq\transport\ResponseCorrelator.cpp, LINE: 145
>         FILE: ..\src\main\activemq\transport\ResponseCorrelator.cpp, LINE: 152
>         FILE: ..\src\main\activemq\connector\openwire\OpenWireFormatNegotiator.c
> pp, LINE: 105
>         FILE: ..\src\main\activemq\connector\openwire\OpenWireConnector.cpp, LIN
> E: 1468
>         FILE: ..\src\main\activemq\connector\openwire\OpenWireConnector.cpp, LIN
> E: 928
>         FILE: ..\src\main\activemq\core\ActiveMQSession.cpp, LINE: 703
>         FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 194
>         FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 149
>         FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 108
> -----------------------------------------------------
> Finished with the example, ignore errors from this
> point on as the sockets breaks when we shutdown.
> =====================================================
> {quote}
> And it generates an access violation, with the following stack trace :
> {quote}
>  	NTDLL.DLL!784905a5() 	
>  	[Les frames ci-dessous sont peut-ĂȘtre incorrects et/ou manquants, aucun symbole chargĂ©
pour NTDLL.DLL]	
>  	NTDLL.DLL!7847bd5a() 	
>  	NTDLL.DLL!7847bf68() 	
>  	NTDLL.DLL!7847bf98() 	
>  	NTDLL.DLL!784ab63e() 	
>  	NTDLL.DLL!7847bf68() 	
>  	NTDLL.DLL!7847bf98() 	
>  	NTDLL.DLL!7847c1ea() 	
>  	msvcr80d.dll!1024db9c() 	
>  	msvcr80d.dll!1020faa5() 	
>  	msvcr80d.dll!1020f839() 	
>  	msvcr80d.dll!1020f7b9() 	
>  	msvcr80d.dll!1026902f() 	
> >	vs2005-activemq-example.exe!std::_Iterator_base::_Adopt(const std::_Container_base
* _Parent=0x00033540)  Ligne 166	C++
>  	vs2005-activemq-example.exe!std::_Vector_const_iterator<unsigned char,std::allocator<unsigned
char> >::_Vector_const_iterator<unsigned char,std::allocator<unsigned char>
>(unsigned char * _Ptr=0x00cb5f21, const std::_Container_base * _Pvector=0x00033540)  Ligne
73	C++
>  	vs2005-activemq-example.exe!std::_Vector_iterator<unsigned char,std::allocator<unsigned
char> >::_Vector_iterator<unsigned char,std::allocator<unsigned char> >(unsigned
char * _Ptr=0x00000009, const std::_Container_base * _Pvector=0x000336dc)  Ligne 309	C++
>  	00cb5f18()	
>  	vs2005-activemq-example.exe!std::vector<unsigned char,std::allocator<unsigned
char> >::push_back(const unsigned char & _Val=0)  Ligne 800 + 0x24 octets	C++
>  	vs2005-activemq-example.exe!activemq::io::ByteArrayOutputStream::write(unsigned char
c=0)  Ligne 54	C++
>  	vs2005-activemq-example.exe!activemq::io::DataOutputStream::write(const unsigned char
c=0)  Ligne 43	C++
>  	vs2005-activemq-example.exe!activemq::io::DataOutputStream::writeUnsignedShort(unsigned
short value=36)  Ligne 126	C++
>  	vs2005-activemq-example.exe!activemq::io::DataOutputStream::writeUTF(const std::basic_string<char,std::char_traits<char>,std::allocator<char>
> & value="4bf52ac5-df69-4b18-b28d-669a36b2b7f9")  Ligne 217	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::marshal::BaseDataStreamMarshaller::looseMarshalString(std::basic_string<char,std::char_traits<char>,std::allocator<char>
> value="4bf52ac5-df69-4b18-b28d-669a36b2b7f9", activemq::io::DataOutputStream * dataOut=0x00cb5df8)
 Ligne 307	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::marshal::v2::ConsumerIdMarshaller::looseMarshal(activemq::connector::openwire::OpenWireFormat
* wireFormat=0x0031e150, activemq::connector::openwire::commands::DataStructure * dataStructure=0x00cb6288,
activemq::io::DataOutputStream * dataOut=0x00cb5df8)  Ligne 131	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireFormat::looseMarshalNestedObject(activemq::connector::openwire::commands::DataStructure
* o=0x00cb6288, activemq::io::DataOutputStream * dataOut=0x00cb5df8)  Ligne 458	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::marshal::BaseDataStreamMarshaller::looseMarshalCachedObject(activemq::connector::openwire::OpenWireFormat
* wireFormat=0x0031e150, activemq::connector::openwire::commands::DataStructure * data=0x00cb6288,
activemq::io::DataOutputStream * dataOut=0x00cb5df8)  Ligne 98 + 0x10 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::marshal::v2::RemoveInfoMarshaller::looseMarshal(activemq::connector::openwire::OpenWireFormat
* wireFormat=0x0031e150, activemq::connector::openwire::commands::DataStructure * dataStructure=0x00034e7c,
activemq::io::DataOutputStream * dataOut=0x00cb5df8)  Ligne 124 + 0x35 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireFormat::marshal(activemq::transport::Command
* command=0x00034e78, activemq::io::DataOutputStream * dataOut=0x0031fd98)  Ligne 153	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireCommandWriter::writeCommand(activemq::transport::Command
* command=0x00034e78)  Ligne 72	C++
>  	vs2005-activemq-example.exe!activemq::transport::IOTransport::oneway(activemq::transport::Command
* command=0x00034e78)  Ligne 83 + 0x1d octets	C++
>  	vs2005-activemq-example.exe!activemq::transport::TransportFilter::oneway(activemq::transport::Command
* command=0x00034e78)  Ligne 147	C++
>  	vs2005-activemq-example.exe!activemq::transport::ResponseCorrelator::oneway(activemq::transport::Command
* command=0x00034e78)  Ligne 87 + 0x1d octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireFormatNegotiator::oneway(activemq::transport::Command
* command=0x00034e78)  Ligne 73 + 0x1d octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::oneway(activemq::transport::Command
* command=0x00034e78)  Ligne 1436 + 0x1d octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::disposeOf(activemq::connector::openwire::commands::DataStructure
* objectId=0x00c91b40)  Ligne 1483	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::closeResource(activemq::connector::ConnectorResource
* resource=0x00c919b8)  Ligne 1315 + 0xf octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::BaseConnectorResource::close()  Ligne
60	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::~OpenWireConsumerInfo()
 Ligne 53	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::`scalar
deleting destructor'()  + 0xf octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::closeResource(activemq::connector::ConnectorResource
* resource=0x00c919b8)  Ligne 1318 + 0x32 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::BaseConnectorResource::close()  Ligne
60	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::~OpenWireConsumerInfo()
 Ligne 53	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::`scalar
deleting destructor'()  + 0xf octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::closeResource(activemq::connector::ConnectorResource
* resource=0x00c919b8)  Ligne 1318 + 0x32 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::BaseConnectorResource::close()  Ligne
60	C++
> 	...
> 	[ here, the same message repeated about 50 times ]
> 	...
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::~OpenWireConsumerInfo()
 Ligne 53	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::`scalar
deleting destructor'()  + 0xf octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::closeResource(activemq::connector::ConnectorResource
* resource=0x00c919b8)  Ligne 1318 + 0x32 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::BaseConnectorResource::close()  Ligne
60	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::~OpenWireConsumerInfo()
 Ligne 53	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::`scalar
deleting destructor'()  + 0xf octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::closeResource(activemq::connector::ConnectorResource
* resource=0x00c919b8)  Ligne 1318 + 0x32 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::BaseConnectorResource::close()  Ligne
60	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::~OpenWireConsumerInfo()
 Ligne 53	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::`scalar
deleting destructor'()  + 0xf octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::closeResource(activemq::connector::ConnectorResource
* resource=0x00c919b8)  Ligne 1318 + 0x32 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::BaseConnectorResource::close()  Ligne
60	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::~OpenWireConsumerInfo()
 Ligne 53	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConsumerInfo::`scalar
deleting destructor'()  + 0xf octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::closeResource(activemq::connector::ConnectorResource
* resource=0x00c919b8)  Ligne 1318 + 0x32 octets	C++
>  	vs2005-activemq-example.exe!activemq::connector::BaseConnectorResource::close()  Ligne
60	C++
>  	vs2005-activemq-example.exe!activemq::core::ActiveMQConsumer::close()  Ligne 87 + 0x19
octets	C++
>  	vs2005-activemq-example.exe!activemq::core::ActiveMQConsumer::~ActiveMQConsumer() 
Ligne 64	C++
>  	vs2005-activemq-example.exe!activemq::core::ActiveMQConsumer::`scalar deleting destructor'()
 + 0xf octets	C++
>  	vs2005-activemq-example.exe!HelloWorldConsumer::cleanup()  Ligne 269 + 0x40 octets
C++
>  	vs2005-activemq-example.exe!HelloWorldConsumer::~HelloWorldConsumer()  Ligne 180	C++
>  	vs2005-activemq-example.exe!main(int argc=1, char * * argv=0x00315b30)  Ligne 340 +
0x2d octets	C++
>  	vs2005-activemq-example.exe!__tmainCRTStartup()  Ligne 586 + 0x19 octets	C
>  	vs2005-activemq-example.exe!mainCRTStartup()  Ligne 403	C
>  	KERNEL32.DLL!77e98989() 	
>  	NTDLL.DLL!78465c09() 	
> {quote}
> I see no way of properly closing ressources when a disconnection happen

-- 
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