You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2008/05/26 23:46:04 UTC

svn commit: r660320 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/client: Connection.cpp Connection.h ConnectionImpl.cpp ConnectionImpl.h Connector.h

Author: aconway
Date: Mon May 26 14:46:00 2008
New Revision: 660320

URL: http://svn.apache.org/viewvc?rev=660320&view=rev
Log:

Fixed intermittent leak of client::Connector thread.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp Mon May 26 14:46:00 2008
@@ -63,9 +63,13 @@
     open(settings);
 }
 
+bool Connection::isOpen() const {
+    return impl && impl->isOpen();
+}
+
 void Connection::open(const ConnectionSettings& settings)
 {
-    if (impl)
+    if (isOpen())
         throw Exception(QPID_MSG("Connection::open() was already called"));
 
     impl = shared_ptr<ConnectionImpl>(new ConnectionImpl(version, settings));
@@ -74,7 +78,7 @@
 }
 
 Session Connection::newSession(const std::string& name) {
-    if (!impl)
+    if (!isOpen())
         throw Exception(QPID_MSG("Connection has not yet been opened"));
     shared_ptr<SessionImpl> simpl(
         new SessionImpl(name, impl, ++channelIdCounter, max_frame_size));
@@ -86,8 +90,8 @@
 }
 
 void Connection::resume(Session& session) {
-    if (!impl)
-        throw Exception(QPID_MSG("Connection has not yet been opened"));
+    if (!isOpen())
+        throw Exception(QPID_MSG("Connection is not open."));
 
     session.impl->setChannel(++channelIdCounter);
     impl->addSession(session.impl);
@@ -95,10 +99,7 @@
 }
 
 void Connection::close() {
-    if (impl) {
-        impl->close();
-        impl.reset();
-    }
+    impl->close();
 }
 
 }} // namespace qpid::client

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h Mon May 26 14:46:00 2008
@@ -121,6 +121,8 @@
      * on a different connection to the one that created it.
      */
     void resume(Session& session);
+
+    bool isOpen() const;
 };
 
 }} // namespace qpid::client

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Mon May 26 14:46:00 2008
@@ -138,7 +138,6 @@
     SessionVector save;
     {
         Mutex::ScopedLock l(lock);
-        if (isClosed) return;
         save = closeInternal(l);
     }
     std::for_each(save.begin(), save.end(), boost::bind(&SessionImpl::connectionClosed, _1, code, text));

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h Mon May 26 14:46:00 2008
@@ -74,6 +74,7 @@
     ~ConnectionImpl();
     
     void open(const std::string& host, int port);
+    bool isOpen() const { return !isClosed && !isClosing; }
 
     void addSession(const boost::shared_ptr<SessionImpl>&);
         

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h?rev=660320&r1=660319&r2=660320&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.h Mon May 26 14:46:00 2008
@@ -126,8 +126,6 @@
 
     ConnectionImpl* impl;
     
-  friend class Channel;
-
   public:
     Connector(framing::ProtocolVersion pVersion,
               const ConnectionSettings&,