[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