Issue #6274. Fixed a potential FD leak in subprocess.py.

This commit is contained in:
Facundo Batista 2009-06-19 19:51:26 +00:00
parent 7731bedca2
commit 07638b9085
2 changed files with 82 additions and 72 deletions

View File

@ -999,6 +999,8 @@ class Popen(object):
# The first char specifies the exception type: 0 means
# OSError, 1 means some other error.
errpipe_read, errpipe_write = os.pipe()
try:
try:
self._set_cloexec_flag(errpipe_write)
gc_was_enabled = gc.isenabled()
@ -1072,7 +1074,10 @@ class Popen(object):
# Parent
if gc_was_enabled:
gc.enable()
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)
if p2cread is not None and p2cwrite is not None:
os.close(p2cread)
if c2pwrite is not None and c2pread is not None:
@ -1082,7 +1087,10 @@ class Popen(object):
# Wait for exec to fail or succeed; possibly raising exception
data = os.read(errpipe_read, 1048576) # Exceptions limited to 1 MB
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)
if data != "":
os.waitpid(self.pid, 0)
child_exception = pickle.loads(data)

View File

@ -56,6 +56,8 @@ Core and Builtins
Library
-------
- Issue #6274: Fixed possible file descriptors leak in subprocess.py
- Issue #6271: mmap tried to close invalid file handle (-1) when annonymous.
(On Unix)