From d485a23d5e73578b68bb6e57f2360e317796dafb Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Fri, 9 Apr 2010 11:39:38 +0000 Subject: cleanup waiter pipes on error git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@932362 13f79535-47bb-0310-9956-ffa450edef68 --- python/qpid/messaging/endpoints.py | 1 + python/qpid/tests/messaging/endpoints.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) (limited to 'python/qpid') diff --git a/python/qpid/messaging/endpoints.py b/python/qpid/messaging/endpoints.py index 17807f20d2..be657173fe 100644 --- a/python/qpid/messaging/endpoints.py +++ b/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/python/qpid/tests/messaging/endpoints.py b/python/qpid/tests/messaging/endpoints.py index 26c7ff25f4..320f88aa3b 100644 --- a/python/qpid/tests/messaging/endpoints.py +++ b/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 -- cgit v1.2.1