From 1632488ab1ff6270b4ef37974b5de2b422365bdb Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 16 Apr 2007 11:32:43 +0000 Subject: Fixes QPID-303 and QPID-409. * qpid/client/Connector: atomic test-and-set for closed, don't try to close if already closed * qpid/client/Connection: atomic test-and-set for isOpen, don't send requests to broker on shutdown git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@529209 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/client/Connection.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/client/Connection.h') diff --git a/cpp/src/qpid/client/Connection.h b/cpp/src/qpid/client/Connection.h index 071a1d9446..c3b9aa33d0 100644 --- a/cpp/src/qpid/client/Connection.h +++ b/cpp/src/qpid/client/Connection.h @@ -26,6 +26,7 @@ #include "qpid/QpidError.h" #include "ClientChannel.h" #include "Connector.h" +#include "qpid/sys/Mutex.h" #include "qpid/sys/ShutdownHandler.h" #include "qpid/sys/TimeoutHandler.h" @@ -81,13 +82,16 @@ class Connection : public ConnectionForChannel Connector defaultConnector; Connector* connector; framing::OutputHandler* out; - volatile bool isOpen; + bool isOpen; + sys::Mutex shutdownLock; Channel channel0; bool debug; void erase(framing::ChannelId); void channelException( Channel&, framing::AMQMethodBody*, const QpidError&); + void closeChannels(); + bool markClosed(); // TODO aconway 2007-01-26: too many friendships, untagle these classes. friend class Channel; -- cgit v1.2.1