From b2abc8c62d71cd013440109b166cab0bb452c73f Mon Sep 17 00:00:00 2001 From: amajorek Date: Wed, 31 Mar 2010 20:09:14 -0400 Subject: [PATCH] Fixed incompatibilities with os module. - os.fdopen should raise OSError, not IOError. --- eventlet/green/os.py | 5 ++++- eventlet/greenio.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/eventlet/green/os.py b/eventlet/green/os.py index 55cecf3..0fbfde5 100644 --- a/eventlet/green/os.py +++ b/eventlet/green/os.py @@ -18,7 +18,10 @@ def fdopen(fd, *args, **kw): Return an open file object connected to a file descriptor.""" if not isinstance(fd, int): raise TypeError('fd should be int, not %r' % fd) - return greenio.GreenPipe(fd, *args, **kw) + try: + return greenio.GreenPipe(fd, *args, **kw) + except IOError, e: + raise OSError(*e.args) __original_read__ = os_orig.read def read(fd, n): diff --git a/eventlet/greenio.py b/eventlet/greenio.py index eff9ab9..078d124 100644 --- a/eventlet/greenio.py +++ b/eventlet/greenio.py @@ -347,7 +347,11 @@ class _SocketDuckForFd(object): raise IOError(*e.args) def __del__(self): - os.close(self._fileno) + try: + os.close(self._fileno) + except: + # os.close may fail if __init__ didn't complete (i.e file dscriptor passed to popen was invalid + pass def __repr__(self): return "%s:%d" % (self.__class__.__name__, self._fileno)