[Python-checkins] r60113 - in python/branches/release25-maint: Lib/subprocess.py Misc/NEWS

gregory.p.smith python-checkins at python.org
Sat Jan 19 23:29:42 CET 2008


Author: gregory.p.smith
Date: Sat Jan 19 23:29:41 2008
New Revision: 60113
Modified:
 python/branches/release25-maint/Lib/subprocess.py
 python/branches/release25-maint/Misc/NEWS
Log:
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.
Modified: python/branches/release25-maint/Lib/subprocess.py
==============================================================================
--- python/branches/release25-maint/Lib/subprocess.py	(original)
+++ python/branches/release25-maint/Lib/subprocess.py	Sat Jan 19 23:29:41 2008
@@ -358,6 +358,7 @@
 import os
 import types
 import traceback
+import gc
 
 # Exception classes used by this module.
 class CalledProcessError(Exception):
@@ -1002,7 +1003,16 @@
 errpipe_read, errpipe_write = os.pipe()
 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
 if self.pid == 0:
 # Child
@@ -1062,6 +1072,8 @@
 os._exit(255)
 
 # Parent
+ if gc_was_enabled:
+ gc.enable()
 os.close(errpipe_write)
 if p2cread and p2cwrite:
 os.close(p2cread)
Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS	(original)
+++ python/branches/release25-maint/Misc/NEWS	Sat Jan 19 23:29:41 2008
@@ -53,6 +53,10 @@
 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.
 
 - Issue #1182: many arithmetic bugs in the decimal module have been


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /