diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2010-03-23 20:34:58 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2010-03-23 20:34:58 +0000 |
| commit | 7cfa62f6187ddecfdf7149cc501778b66d8cfcc8 (patch) | |
| tree | 182e61f704191fb5471b6a1cd316bda5c426b2e1 /python/qpid/compat.py | |
| parent | 858769adbb30ff616f39f20c9ecc1a0bd3349205 (diff) | |
| download | qpid-python-7cfa62f6187ddecfdf7149cc501778b66d8cfcc8.tar.gz | |
fixed resource leakage on repeated connection open/close
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@926766 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid/compat.py')
| -rw-r--r-- | python/qpid/compat.py | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/python/qpid/compat.py b/python/qpid/compat.py index c2b668a5e9..8b1f4b746b 100644 --- a/python/qpid/compat.py +++ b/python/qpid/compat.py @@ -84,6 +84,16 @@ if sys.platform in ('win32', 'cygwin'): def fileno(self): return self.read_sock.fileno() + def close(self): + if self.write_sock is not None: + self.write_sock.close() + self.write_sock = None + self.read_sock.close() + self.read_sock = None + + def __del__(self): + self.close() + def __repr__(self): return "SockWaiter(%r, %r)" % (self.read_sock, self.write_sock) @@ -102,9 +112,8 @@ else: class PipeWaiter(BaseWaiter): - def __init__(self, read_fd, write_fd): - self.read_fd = read_fd - self.write_fd = write_fd + def __init__(self): + self.read_fd, self.write_fd = os.pipe() def _do_write(self): os.write(self.write_fd, "\0") @@ -115,8 +124,18 @@ else: def fileno(self): return self.read_fd + def close(self): + if self.write_fd is not None: + os.close(self.write_fd) + self.write_fd = None + os.close(self.read_fd) + self.read_fd = None + + def __del__(self): + self.close() + def __repr__(self): return "PipeWaiter(%r, %r)" % (self.read_fd, self.write_fd) def selectable_waiter(): - return PipeWaiter(*os.pipe()) + return PipeWaiter() |
