From 2b9aba3af8c27b22e4fdc3d8ccd3e0aae0c5c6fc Mon Sep 17 00:00:00 2001 From: Ted Ross Date: Tue, 11 Nov 2008 20:15:49 +0000 Subject: Fixed a file-descriptor leak in the c++ client API. If the socket connection fails, the socket is never closed. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@713154 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/client/Connector.cpp | 8 +++++++- cpp/src/qpid/client/SslConnector.cpp | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'cpp/src/qpid') diff --git a/cpp/src/qpid/client/Connector.cpp b/cpp/src/qpid/client/Connector.cpp index 6509964fe8..ea32c4e097 100644 --- a/cpp/src/qpid/client/Connector.cpp +++ b/cpp/src/qpid/client/Connector.cpp @@ -197,7 +197,13 @@ TCPConnector::~TCPConnector() { 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); diff --git a/cpp/src/qpid/client/SslConnector.cpp b/cpp/src/qpid/client/SslConnector.cpp index 63f2f1a84f..e821ca4f45 100644 --- a/cpp/src/qpid/client/SslConnector.cpp +++ b/cpp/src/qpid/client/SslConnector.cpp @@ -186,7 +186,13 @@ SslConnector::~SslConnector() { 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); -- cgit v1.2.1