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

Reply via email to