diff options
Diffstat (limited to 'dev-util/scons/files/scons-1.2.0-popen.patch')
-rw-r--r-- | dev-util/scons/files/scons-1.2.0-popen.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/dev-util/scons/files/scons-1.2.0-popen.patch b/dev-util/scons/files/scons-1.2.0-popen.patch new file mode 100644 index 000000000000..23063cffd0c5 --- /dev/null +++ b/dev-util/scons/files/scons-1.2.0-popen.patch @@ -0,0 +1,58 @@ +--- engine/SCons/compat/__init__.py (revision 2695) ++++ engine/SCons/compat/__init__.py (working copy) +@@ -167,11 +167,17 @@ + del shlex + import_as('_scons_shlex', 'shlex') + +-try: +- import subprocess +-except ImportError: +- # Pre-2.4 Python has no subprocess module. +- import_as('_scons_subprocess', 'subprocess') ++#try: ++# import subprocess ++#except ImportError: ++# # Pre-2.4 Python has no subprocess module. ++# import_as('_scons_subprocess', 'subprocess') ++ ++# Import subprocess unconditionally to avoid possible race conditions in ++# the official subprocess API. If there are API versions without known ++# problems, we can version-check and use the original subprocess module ++# in these cases. ++import_as('_scons_subprocess', 'subprocess') + + import sys + try: + + +--- engine/SCons/compat/_scons_subprocess.py (revision 2695) ++++ engine/SCons/compat/_scons_subprocess.py (working copy) +@@ -581,13 +581,19 @@ + class object: + pass + ++import thread ++lock = thread.allocate_lock() ++ + class Popen(object): + def __init__(self, args, bufsize=0, executable=None, + stdin=None, stdout=None, stderr=None, + preexec_fn=None, close_fds=False, shell=False, + cwd=None, env=None, universal_newlines=False, + startupinfo=None, creationflags=0): +- """Create new Popen instance.""" ++ """Create new Popen instance. ++ Popen is not thread-safe and is therefore protected with a lock. ++ """ ++ lock.acquire() + _cleanup() + + self._child_created = False +@@ -655,6 +661,7 @@ + self.stderr = os.fdopen(errread, 'rU', bufsize) + else: + self.stderr = os.fdopen(errread, 'rb', bufsize) ++ lock.release() + + + def _translate_newlines(self, data): |