Author: astitcher
Date: Thu Jan 21 06:15:06 2010
New Revision: 901547

URL: http://svn.apache.org/viewvc?rev=901547&view=rev
Log:
Split out AsynchConnecter::start from constructor (like other AsynchIO classes)

Modified:
    qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h
    qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp Thu Jan 21 06:15:06 
2010
@@ -91,14 +91,15 @@
     assert(closed);
     assert(joined);
     poller = Poller::shared_ptr(new Poller);
+    AsynchConnector* c =
     AsynchConnector::create(socket,
-                            poller,
                             host, port,
                             boost::bind(&TCPConnector::connected, this, _1),
                             boost::bind(&TCPConnector::connectFailed, this, 
_3));
     closed = false;
     joined = false;
     receiver = Thread(this);
+    c->start(poller);
 }
 
 void TCPConnector::connected(const Socket&) {

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h Thu Jan 21 06:15:06 2010
@@ -61,11 +61,11 @@
     // deletes. To correctly manage heaps when needed, the allocate and
     // delete should both be done from the same class/library.
     QPID_COMMON_EXTERN static AsynchConnector* create(const Socket& s,
-                                   boost::shared_ptr<Poller> poller,
                                    std::string hostname,
                                    uint16_t port,
                                    ConnectedCallback connCb,
                                    FailedCallback failCb);
+    virtual void start(boost::shared_ptr<Poller> poller) = 0;
 
 protected:
     AsynchConnector() {}

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp Thu Jan 21 06:15:06 2010
@@ -141,14 +141,15 @@
     // is no longer needed.
 
     Socket* socket = new Socket();
-    AsynchConnector::create(*socket,
-                            poller,
-                            host,
-                            port,
-                            boost::bind(&AsynchIOProtocolFactory::established,
-                                        this, poller, _1, fact, true),
-                            
boost::bind(&AsynchIOProtocolFactory::connectFailed,
-                                        this, _1, _2, _3, failed));
+    AsynchConnector* c = AsynchConnector::create(
+        *socket,
+        host,
+        port,
+        boost::bind(&AsynchIOProtocolFactory::established,
+                    this, poller, _1, fact, true),
+        boost::bind(&AsynchIOProtocolFactory::connectFailed,
+                    this, _1, _2, _3, failed));
+    c->start(poller);
 }
 
 }} // namespace qpid::sys

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp Thu Jan 21 06:15:06 2010
@@ -154,15 +154,14 @@
 
 public:
     AsynchConnector(const Socket& socket,
-                    Poller::shared_ptr poller,
                     std::string hostname,
                     uint16_t port,
                     ConnectedCallback connCb,
                     FailedCallback failCb);
+    void start(Poller::shared_ptr poller);
 };
 
 AsynchConnector::AsynchConnector(const Socket& s,
-                                 Poller::shared_ptr poller,
                                  std::string hostname,
                                  uint16_t port,
                                  ConnectedCallback connCb,
@@ -180,13 +179,18 @@
     try {
         socket.connect(sa);
     } catch(std::exception& e) {
-        // Defer reporting failure
-        startWatch(poller);
+        // Defer reporting failure till we start polling
         errMsg = e.what();
-        DispatchHandle::call(boost::bind(&AsynchConnector::failure, this, -1, 
errMsg));
-        return;
     }
+}
+
+void AsynchConnector::start(Poller::shared_ptr poller)
+{
     startWatch(poller);
+    // If we previously detected an error insert failure callback now
+    if ( !errMsg.empty() ) {
+        DispatchHandle::call(boost::bind(&AsynchConnector::failure, this, -1, 
errMsg));
+    }
 }
 
 void AsynchConnector::connComplete(DispatchHandle& h)
@@ -600,13 +604,12 @@
 }
 
 AsynchConnector* AsynchConnector::create(const Socket& s,
-                                         Poller::shared_ptr poller,
                                          std::string hostname,
                                          uint16_t port,
                                          ConnectedCallback connCb,
                                          FailedCallback failCb)
 {
-    return new posix::AsynchConnector(s, poller, hostname, port, connCb, 
failCb);
+    return new posix::AsynchConnector(s, hostname, port, connCb, failCb);
 }
 
 AsynchIO* AsynchIO::create(const Socket& s,

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp Thu Jan 21 06:15:06 
2010
@@ -172,23 +172,30 @@
     ConnectedCallback connCallback;
     FailedCallback failCallback;
     const Socket& socket;
+    const std::string hostname;
+    const uint16_t port;
 
 public:
     AsynchConnector(const Socket& socket,
-                    Poller::shared_ptr poller,
                     std::string hostname,
                     uint16_t port,
                     ConnectedCallback connCb,
                     FailedCallback failCb = 0);
+    void start(Poller::shared_ptr poller);
 };
 
 AsynchConnector::AsynchConnector(const Socket& sock,
-                                 Poller::shared_ptr poller,
-                                 std::string hostname,
-                                 uint16_t port,
+                                 std::string hname,
+                                 uint16_t p,
                                  ConnectedCallback connCb,
-                                 FailedCallback failCb)
-  : connCallback(connCb), failCallback(failCb), socket(sock) {
+                                 FailedCallback failCb) :
+    connCallback(connCb), failCallback(failCb), socket(sock),
+    hostname(hname), port(p)
+{
+}
+
+AsynchConnector::start(Poller::shared_ptr)
+{
     try {
         socket.connect(hostname, port);
         socket.setNonblocking();



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to