You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2013/02/15 19:46:22 UTC
svn commit: r1446723 - in
/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport:
IOTransport.cpp IOTransport.h
Author: tabish
Date: Fri Feb 15 18:46:22 2013
New Revision: 1446723
URL: http://svn.apache.org/r1446723
Log:
https://issues.apache.org/jira/browse/AMQCPP-459
fix for crash found in IOTransport shutdown.
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.cpp?rev=1446723&r1=1446722&r2=1446723&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.cpp Fri Feb 15 18:46:22 2013
@@ -230,7 +230,6 @@ void IOTransport::close() {
try {
if (impl->inputStream != NULL) {
impl->inputStream->close();
- impl->inputStream = NULL;
}
} catch (IOException& ex) {
error = ex;
@@ -242,7 +241,6 @@ void IOTransport::close() {
// Close the output stream.
if (impl->outputStream != NULL) {
impl->outputStream->close();
- impl->outputStream = NULL;
}
} catch (IOException& ex) {
if (!hasException) {
@@ -252,9 +250,6 @@ void IOTransport::close() {
}
}
- // Clear the WireFormat so we can't use it anymore
- this->impl->wireFormat.reset(NULL);
-
if (hasException) {
throw error;
}
@@ -270,7 +265,7 @@ void IOTransport::run() {
try {
- while (!isClosed()) {
+ while (this->impl->started.get() && !this->impl->closed.get()) {
// Read the next command from the input stream.
Pointer<Command> command(impl->wireFormat->unmarshal(this, this->impl->inputStream));
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.h?rev=1446723&r1=1446722&r2=1446723&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/transport/IOTransport.h Fri Feb 15 18:46:22 2013
@@ -23,7 +23,6 @@
#include <activemq/transport/TransportListener.h>
#include <activemq/commands/Command.h>
#include <activemq/commands/Response.h>
-#include <activemq/exceptions/ActiveMQException.h>
#include <activemq/wireformat/WireFormat.h>
#include <decaf/lang/Runnable.h>
@@ -31,7 +30,6 @@
#include <decaf/io/DataInputStream.h>
#include <decaf/io/DataOutputStream.h>
#include <decaf/util/logging/LoggerDefines.h>
-#include <memory>
namespace activemq {
namespace transport {
@@ -44,10 +42,16 @@ namespace transport {
/**
* Implementation of the Transport interface that performs marshaling of commands
- * to IO streams. This class does not implement the request method, it only handles
+ * to IO streams.
+ *
+ * This class does not implement the Transport::request method, it only handles
* oneway messages. A thread polls on the input stream for in-coming commands. When
* a command is received, the command listener is notified. The polling thread is not
- * started until the start method is called. The close method will close the associated
+ * started until the start method is called. Polling can be suspending by calling stop;
+ * however, because the read operation is blocking the transport my still pull one command
+ * off the wire even after the stop method has been called.
+ *
+ * The close method will close the associated
* streams. Close can be called explicitly by the user, but is also called in the
* destructor. Once this object has been closed, it cannot be restarted.
*/
@@ -69,13 +73,17 @@ namespace transport {
/**
* Notify the exception listener
- * @param ex the exception to send
+ *
+ * @param ex
+ * The exception to send to any registered listener.
*/
void fire(decaf::lang::Exception& ex);
/**
* Notify the command listener.
- * @param command the command the send
+ *
+ * @param
+ * The command the command the send to any registered listener.
*/
void fire(const Pointer<Command> command);
@@ -104,6 +112,7 @@ namespace transport {
* The InputStream that will be read from by this object.
*/
virtual void setInputStream(decaf::io::DataInputStream* is);
+
/**
* Sets the stream to which this Transport implementation will write its data.
*
@@ -193,9 +202,6 @@ namespace transport {
public: // Runnable methods.
- /**
- * Runs the polling thread.
- */
virtual void run();
};