You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2008/11/11 21:15:51 UTC

svn commit: r713154 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/client: Connector.cpp SslConnector.cpp

Author: tross
Date: Tue Nov 11 12:15:49 2008
New Revision: 713154

URL: http://svn.apache.org/viewvc?rev=713154&view=rev
Log:
Fixed a file-descriptor leak in the c++ client API.  If the socket connection
fails, the socket is never closed.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/SslConnector.cpp

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?rev=713154&r1=713153&r2=713154&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp Tue Nov 11 12:15:49 2008
@@ -197,7 +197,13 @@
 void TCPConnector::connect(const std::string& host, int port){
     Mutex::ScopedLock l(closedLock);
     assert(closed);
-    socket.connect(host, port);
+    try {
+        socket.connect(host, port);
+    } catch (const std::exception& e) {
+        socket.close();
+        throw;
+    }
+
     identifier = str(format("[%1% %2%]") % socket.getLocalPort() % socket.getPeerAddress());
     closed = false;
     poller = Poller::shared_ptr(new Poller);

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/SslConnector.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/SslConnector.cpp?rev=713154&r1=713153&r2=713154&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/SslConnector.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/SslConnector.cpp Tue Nov 11 12:15:49 2008
@@ -186,7 +186,13 @@
 void SslConnector::connect(const std::string& host, int port){
     Mutex::ScopedLock l(closedLock);
     assert(closed);
-    socket.connect(host, port);
+    try {
+        socket.connect(host, port);
+    } catch (const std::exception& e) {
+        socket.close();
+        throw;
+    }
+
     identifier = str(format("[%1% %2%]") % socket.getLocalPort() % socket.getPeerAddress());
     closed = false;
     poller = Poller::shared_ptr(new Poller);