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 2007/08/06 10:49:28 UTC

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

Author: gsim
Date: Mon Aug  6 01:49:27 2007
New Revision: 563067

URL: http://svn.apache.org/viewvc?view=rev&rev=563067
Log:
Fixed race in connection shutdown preventing Connector from being garbage collected on occasion.


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp
    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.cpp

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?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp Mon Aug  6 01:49:27 2007
@@ -185,10 +185,10 @@
         break;
     case CLOSING:
         if (method->isA<ConnectionCloseOkBody>()) {
-            setState(CLOSED);
             if (onClose) {
                 onClose();
             }
+            setState(CLOSED);
         } else {
             QPID_LOG(warning, "Received frame on channel zero while closing connection; frame ignored.");        
         }

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?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Mon Aug  6 01:49:27 2007
@@ -30,6 +30,7 @@
     handler.in = boost::bind(&ConnectionImpl::incoming, this, _1);
     handler.out = boost::bind(&Connector::send, connector, _1);
     handler.onClose = boost::bind(&ConnectionImpl::closed, this);
+    handler.onError = boost::bind(&ConnectionImpl::closedByPeer, this, _1, _2);
     connector->setInputHandler(&handler);
     connector->setTimeoutHandler(this);
     connector->setShutdownHandler(this);
@@ -88,10 +89,10 @@
 
 void ConnectionImpl::closed()
 {
-    closed(200, "OK");
+    closedByPeer(200, "OK");
 }
 
-void ConnectionImpl::closed(uint16_t code, const std::string& text)
+void ConnectionImpl::closedByPeer(uint16_t code, const std::string& text)
 {
     for (SessionMap::iterator i = sessions.begin(); i != sessions.end(); i++) {
         i->second->closed(code, text);
@@ -114,7 +115,7 @@
 void ConnectionImpl::shutdown() {
     //this indicates that the socket to the server has closed
     for (SessionMap::iterator i = sessions.begin(); i != sessions.end(); i++) {
-        i->second->closed(0, "Unexpected scoket closure.");
+        i->second->closed(0, "Unexpected socket closure.");
     }
     sessions.clear();
 }

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?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.h Mon Aug  6 01:49:27 2007
@@ -47,7 +47,7 @@
 
     void incoming(framing::AMQFrame& frame);    
     void closed();
-    void closed(uint16_t, const std::string&);
+    void closedByPeer(uint16_t, const std::string&);
     void idleOut();
     void idleIn();
     void shutdown();

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp?view=diff&rev=563067&r1=563066&r2=563067
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp Mon Aug  6 01:49:27 2007
@@ -47,11 +47,7 @@
     outbuf(send_buffer_size)
 { }
 
-Connector::~Connector(){
-    closeInternal();
-    if (receiver.id())
-        receiver.join();
-}
+Connector::~Connector(){}
 
 void Connector::connect(const std::string& host, int port){
     socket.connect(host, port);