diff options
Diffstat (limited to 'qpid/python')
| -rw-r--r-- | qpid/python/qpid/messaging/endpoints.py | 1 | ||||
| -rw-r--r-- | qpid/python/qpid/tests/messaging/endpoints.py | 20 |
2 files changed, 21 insertions, 0 deletions
diff --git a/qpid/python/qpid/messaging/endpoints.py b/qpid/python/qpid/messaging/endpoints.py index 17807f20d2..be657173fe 100644 --- a/qpid/python/qpid/messaging/endpoints.py +++ b/qpid/python/qpid/messaging/endpoints.py @@ -174,6 +174,7 @@ class Connection: def _check_error(self, exc=ConnectionError): if self.error: + self._condition.gc() raise exc(*self.error) def _ewait(self, predicate, timeout=None, exc=ConnectionError): diff --git a/qpid/python/qpid/tests/messaging/endpoints.py b/qpid/python/qpid/tests/messaging/endpoints.py index 26c7ff25f4..320f88aa3b 100644 --- a/qpid/python/qpid/tests/messaging/endpoints.py +++ b/qpid/python/qpid/tests/messaging/endpoints.py @@ -67,6 +67,26 @@ class SetupTests(Base): while fds: os.close(fds.pop()) + def testOpenFailResourceLeaks(self): + fds = self.use_fds() + try: + for i in range(32): + if fds: os.close(fds.pop()) + for i in xrange(64): + conn = Connection("localhost:0", **self.connection_options()) + # XXX: we need to force a waiter to be created for this test + # to work + conn._lock.acquire() + conn._wait(lambda: False, timeout=0.001) + conn._lock.release() + try: + conn.open() + except ConnectError, e: + pass + finally: + while fds: + os.close(fds.pop()) + def testReconnect(self): options = self.connection_options() import socket |
