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);