You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2008/06/26 14:25:59 UTC

svn commit: r671877 - in /incubator/qpid/trunk/qpid/cpp/src: qpid/client/ConnectionImpl.cpp qpid/client/ConnectionImpl.h tests/ClientSessionTest.cpp

Author: gsim
Date: Thu Jun 26 05:25:58 2008
New Revision: 671877

URL: http://svn.apache.org/viewvc?rev=671877&view=rev
Log:
QPID-1137: don't treat connection as opened if the open never succeeds


Modified:
    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/tests/ClientSessionTest.cpp

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=671877&r1=671876&r2=671877&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Thu Jun 26 05:25:58 2008
@@ -40,7 +40,7 @@
       handler(settings, v),
       connector(v, settings, this), 
       version(v), 
-      isClosed(false), 
+      isClosed(true),//closed until successfully opened 
       isClosing(false)
 {
     QPID_LOG(debug, "ConnectionImpl created for " << version);
@@ -88,12 +88,20 @@
     s->in(frame);
 }
 
+bool ConnectionImpl::isOpen() const 
+{ 
+    return !isClosed && !isClosing; 
+}
+
+
 void ConnectionImpl::open(const std::string& host, int port)
 {
     QPID_LOG(info, "Connecting to " << host << ":" << port);
     connector.connect(host, port);
     connector.init();
-    handler.waitForOpen();
+    handler.waitForOpen();    
+    Mutex::ScopedLock l(lock);
+    isClosed = false;
 }
 
 void ConnectionImpl::idleIn()

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=671877&r1=671876&r2=671877&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h Thu Jun 26 05:25:58 2008
@@ -72,7 +72,7 @@
     ~ConnectionImpl();
     
     void open(const std::string& host, int port);
-    bool isOpen() const { return !isClosed && !isClosing; }
+    bool isOpen() const;
 
     void addSession(const boost::shared_ptr<SessionImpl>&);
         

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp?rev=671877&r1=671876&r2=671877&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp Thu Jun 26 05:25:58 2008
@@ -246,6 +246,21 @@
     BOOST_CHECK_EQUAL("foo1", fix.subs.get("getq").getData());
 }
 
+QPID_AUTO_TEST_CASE(testOpenFailure) {
+    BrokerFixture b;
+    Connection c;
+    string host("unknowable-host");
+    try {
+        c.open(host);
+    } catch (const Exception&) {
+        BOOST_CHECK(!c.isOpen());
+    }
+    b.open(c);
+    BOOST_CHECK(c.isOpen());
+    c.close();
+    BOOST_CHECK(!c.isOpen());
+}
+
 QPID_AUTO_TEST_SUITE_END()