Commit c223c6cb authored by Gregory P. Smith's avatar Gregory P. Smith

backport r60104 + r60111 from trunk.

- Issue #1336: fix a race condition in subprocess.Popen if the garbage
  collector kicked in at the wrong time that would cause the process
  to hang when the child wrote to stderr.
parent af81c576
...@@ -358,6 +358,7 @@ mswindows = (sys.platform == "win32") ...@@ -358,6 +358,7 @@ mswindows = (sys.platform == "win32")
import os import os
import types import types
import traceback import traceback
import gc
# Exception classes used by this module. # Exception classes used by this module.
class CalledProcessError(Exception): class CalledProcessError(Exception):
...@@ -1002,7 +1003,16 @@ class Popen(object): ...@@ -1002,7 +1003,16 @@ class Popen(object):
errpipe_read, errpipe_write = os.pipe() errpipe_read, errpipe_write = os.pipe()
self._set_cloexec_flag(errpipe_write) self._set_cloexec_flag(errpipe_write)
self.pid = os.fork() gc_was_enabled = gc.isenabled()
# Disable gc to avoid bug where gc -> file_dealloc ->
# write to stderr -> hang. http://bugs.python.org/issue1336
gc.disable()
try:
self.pid = os.fork()
except:
if gc_was_enabled:
gc.enable()
raise
self._child_created = True self._child_created = True
if self.pid == 0: if self.pid == 0:
# Child # Child
...@@ -1062,6 +1072,8 @@ class Popen(object): ...@@ -1062,6 +1072,8 @@ class Popen(object):
os._exit(255) os._exit(255)
# Parent # Parent
if gc_was_enabled:
gc.enable()
os.close(errpipe_write) os.close(errpipe_write)
if p2cread and p2cwrite: if p2cread and p2cwrite:
os.close(p2cread) os.close(p2cread)
......
...@@ -53,6 +53,10 @@ Core and builtins ...@@ -53,6 +53,10 @@ Core and builtins
Library Library
------- -------
- Issue #1336: fix a race condition in subprocess.Popen if the garbage
collector kicked in at the wrong time that would cause the process
to hang when the child wrote to stderr.
- Bug #1687: Fixed plistlib.py restricts <integer> to Python int when writing. - Bug #1687: Fixed plistlib.py restricts <integer> to Python int when writing.
- Issue #1182: many arithmetic bugs in the decimal module have been - Issue #1182: many arithmetic bugs in the decimal module have been
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment