summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-11-11 20:15:49 +0000
committerTed Ross <tross@apache.org>2008-11-11 20:15:49 +0000
commit113cc5b1517b1c81216500c63472de0b797a5775 (patch)
tree2d2024ab0b3de6b11be46587bc971b332e8681d7 /qpid/cpp
parentc8e02b87d416f44d2cfc6acc707ab2ef8d7ad813 (diff)
downloadqpid-python-113cc5b1517b1c81216500c63472de0b797a5775.tar.gz
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@713154 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/src/qpid/client/Connector.cpp8
-rw-r--r--qpid/cpp/src/qpid/client/SslConnector.cpp8
2 files changed, 14 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/client/Connector.cpp b/qpid/cpp/src/qpid/client/Connector.cpp
index 6509964fe8..ea32c4e097 100644
--- a/qpid/cpp/src/qpid/client/Connector.cpp
+++ b/qpid/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/qpid/cpp/src/qpid/client/SslConnector.cpp b/qpid/cpp/src/qpid/client/SslConnector.cpp
index 63f2f1a84f..e821ca4f45 100644
--- a/qpid/cpp/src/qpid/client/SslConnector.cpp
+++ b/qpid/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);