You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2008/07/24 06:42:51 UTC

svn commit: r679268 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/client: ConnectionHandler.cpp ConnectionHandler.h ConnectionImpl.cpp ConnectionImpl.h

Author: astitcher
Date: Wed Jul 23 21:42:51 2008
New Revision: 679268

URL: http://svn.apache.org/viewvc?rev=679268&view=rev
Log:
Refactor to change client connector state machine to be held in ConnectionHandler

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

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp?rev=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp Wed Jul 23 21:42:51 2008
@@ -186,3 +186,14 @@
     }
     setState(CLOSED);
 }
+
+bool ConnectionHandler::isOpen() const
+{
+    return getState() == OPEN;
+}
+
+bool ConnectionHandler::isClosed() const
+{
+    int s = getState();
+    return s == CLOSING || s == CLOSED || s == FAILED;
+}

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h?rev=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h Wed Jul 23 21:42:51 2008
@@ -96,6 +96,10 @@
     void close();
     void fail(const std::string& message);
 
+    // Note that open and closed aren't related by open = !closed
+    bool isOpen() const;
+    bool isClosed() const;
+
     CloseListener onClose;
     ErrorListener onError;
 };

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=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Wed Jul 23 21:42:51 2008
@@ -40,9 +40,7 @@
     : Bounds(settings.maxFrameSize * settings.bounds),
       handler(settings, v),
       connector(new Connector(v, settings, this)), 
-      version(v), 
-      isClosed(true),//closed until successfully opened 
-      isClosing(false)
+      version(v)
 {
     QPID_LOG(debug, "ConnectionImpl created for " << version);
     handler.in = boost::bind(&ConnectionImpl::incoming, this, _1);
@@ -91,7 +89,7 @@
 
 bool ConnectionImpl::isOpen() const 
 { 
-    return !isClosed && !isClosing; 
+    return handler.isOpen();
 }
 
 
@@ -101,8 +99,6 @@
     connector->connect(host, port);
     connector->init();
     handler.waitForOpen();    
-    Mutex::ScopedLock l(lock);
-    isClosed = false;
 }
 
 void ConnectionImpl::idleIn()
@@ -118,19 +114,13 @@
 
 void ConnectionImpl::close()
 {
-    Mutex::ScopedLock l(lock);
-    if (isClosing || isClosed) return;
-    isClosing = true;
-    {
-        Mutex::ScopedUnlock u(lock);
-        handler.close();
-    }
+    if (!handler.isOpen()) return;
+    handler.close();
     closed(NORMAL, "Closed by client");
 }
 
 
 template <class F> void ConnectionImpl::closeInternal(const F& f) {
-    isClosed = true;
     connector->close();
     for (SessionMap::iterator i = sessions.begin(); i != sessions.end(); ++i) {
         boost::shared_ptr<SessionImpl> s = i->second.lock();
@@ -151,7 +141,7 @@
     Mutex::ScopedLock l(lock);
     // FIXME aconway 2008-06-06: exception use, connection-forced is incorrect here.
     setException(new ConnectionException(CONNECTION_FORCED, CONN_CLOSED));
-    if (isClosed) return;
+    if (handler.isClosed()) return;
     handler.fail(CONN_CLOSED);
     closeInternal(boost::bind(&SessionImpl::connectionBroke, _1, CONNECTION_FORCED, CONN_CLOSED));
 }

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=679268&r1=679267&r2=679268&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h Wed Jul 23 21:42:51 2008
@@ -56,8 +56,6 @@
     boost::scoped_ptr<Connector> connector;
     framing::ProtocolVersion version;
     sys::Mutex lock;
-    bool isClosed;
-    bool isClosing;
 
     template <class F> void closeInternal(const F&);
 
@@ -66,7 +64,6 @@
     void idleOut();
     void idleIn();
     void shutdown();
-    bool setClosing();
 
   public:
     ConnectionImpl(framing::ProtocolVersion version, const ConnectionSettings& settings);