You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "olivier renaud (JIRA)" <ji...@apache.org> on 2007/06/12 16:12:32 UTC
[jira] Created: (AMQCPP-126) closing ressources after an
IOException crashes the app
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
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.
[jira] Resolved: (AMQCPP-126) closing ressources after an
IOException crashes the app
Posted by "Timothy Bish (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/AMQCPP-126?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Timothy Bish resolved AMQCPP-126.
---------------------------------
Resolution: Fixed
Fixed in trunk, there was an infinite loop occurring in the close of the producer, solved now.
> 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: Timothy Bish
> 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.
[jira] Updated: (AMQCPP-126) closing ressources after an
IOException crashes the app
Posted by "Timothy Bish (JIRA)" <ji...@apache.org>.
[ 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.
[jira] Assigned: (AMQCPP-126) closing ressources after an
IOException crashes the app
Posted by "Timothy Bish (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/AMQCPP-126?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Timothy Bish reassigned AMQCPP-126:
-----------------------------------
Assignee: Timothy Bish (was: Nathan Mittler)
> 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: Timothy Bish
> 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.
[jira] Commented: (AMQCPP-126) closing ressources after an
IOException crashes the app
Posted by "olivier renaud (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/AMQCPP-126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_39452 ]
olivier renaud commented on AMQCPP-126:
---------------------------------------
The example and my code work well, now. Thanks !
> 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: Timothy Bish
> 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.