[prev in list] [next in list] [prev in thread] [next in thread] 

List:       activemq-dev
Subject:    [jira] Updated: (AMQCPP-142) BufferedOutputStream flush called
From:       "Nathan Mittler (JIRA)" <jira () apache ! org>
Date:       2007-09-30 10:24:23
Message-ID: 12664452.1191147863039.JavaMail.jira () brutus
[Download RAW message or body]


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

Nathan Mittler updated AMQCPP-142:
----------------------------------

    Fix Version/s:     (was: 2.2)
                   2.1.1

> BufferedOutputStream flush called after BufferedOutputStream close resulting in \
>                 unhandled exceptions
> ----------------------------------------------------------------------------------------------------
>  
> Key: AMQCPP-142
> URL: https://issues.apache.org/activemq/browse/AMQCPP-142
> Project: ActiveMQ C++ Client
> Issue Type: Bug
> Components: Openwire
> Affects Versions: 2.1
> Environment: WinXP Pro SP2
> Reporter: Roger
> Assignee: Timothy Bish
> Fix For: 2.1.1
> 
> 
> After comms have been broken (shutting down the broker is an easy way to \
> reproduce...) and the producer attempts to send a message a Transport IO exception \
> is raised but after this point the session cannot be cleanly closed. The sessions \
> closed flag indicates it is not already closed. The problem seems to be mainly in \
> the BufferedOutputStream - this objects "close" method is called but after this the \
> same objects "flush" method is called resulting in exceptions (attempts to access \
> deleted memory). I'm presuming it is attempting to send cached data after the \
> stream has been closed. This is ActiveMQ-CPP 2.1, using Broker version 5.0:-
> http://people.apache.org/repo/m2-snapshot-repository/org/apache/activemq/apache-activemq/5.0-SNAPSHOT/apache-activemq-5.0-20070904.133257-1.zip
>  The following is an example snippet of code which demonstrates this problem:
> static Connection* connection = NULL;
> static Session* session = NULL;
> static Destination* destination = NULL;
> static MessageProducer* producer = NULL;
> static const std::string brokerURI = \
> "tcp://127.0.0.1:61616?wireFormat=openwire&transport.useAsyncSend=true&connectionTimeout=5000&soTimeout=1000";
>  bool initialise()
> {
> bool result = false;
> try {
> ActiveMQConnectionFactory* connectionFactory = new ActiveMQConnectionFactory( \
> brokerURI ); // Create a Connection
> connection = connectionFactory->createConnection();
> connection->start();
> delete connectionFactory;
> // Create a Session
> session = connection->createSession( Session::AUTO_ACKNOWLEDGE );
> // Create the destination
> destination = session->createQueue( "BARNEY" );
> // Create a MessageProducer from the Session to the Queue
> producer = session->createProducer( destination );
> producer->setDeliveryMode( DeliveryMode::NON_PERSISTENT);
> result = true;
> }
> catch (activemq::exceptions::ActiveMQException& e) {
> e.printStackTrace();
> }
> return result;
> }
> bool sendMessage(string msg)
> {
> bool result = false;
> try {
> TextMessage* message = session->createTextMessage( msg );
> producer->send( message );
> delete message;
> 
> result = true;
> }
> catch (activemq::exceptions::ActiveMQException& e) { // <------<<<< catches the \
> exception after the broker has been shutdown (transport is closed) // Close open \
> resources. try{
> if( session != NULL ){
> session->close();  // <--------<<<< Causes unhandled exceptions
> }
> // close connection...
> // free everything else...
> }
> }
> return result;
> }
> void main()
> {
> if (initialise()){
> while (1){
> // do things to create the data to send...
> // send data
> sendMessage("fred");
> // sleep for a bit....
> // <<<< KILL THE BROKER SOMETIME DURING THIS LOOP >>>>
> }
> // clean up .....
> }
> } 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic