From 7325c1ebc8cf88249d0adeadc0f52600e727c762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Fonseca?= Date: Tue, 14 Jul 2009 11:09:23 +0100 Subject: scons: Monkey patch os.spawnve on Windows to become thread safe. See also: - http://bugs.python.org/issue6476 - http://scons.tigris.org/issues/show_bug.cgi?id=2449 --- scons/fixes.py | 27 +++++++++++++++++++++++++++ scons/gallium.py | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 scons/fixes.py (limited to 'scons') diff --git a/scons/fixes.py b/scons/fixes.py new file mode 100644 index 0000000000..714cccf61d --- /dev/null +++ b/scons/fixes.py @@ -0,0 +1,27 @@ +import sys + +# Monkey patch os.spawnve on windows to become thread safe +if sys.platform == 'win32': + import os + import threading + from os import spawnve as old_spawnve + + spawn_lock = threading.Lock() + + def new_spawnve(mode, file, args, env): + spawn_lock.acquire() + try: + if mode == os.P_WAIT: + ret = old_spawnve(os.P_NOWAIT, file, args, env) + else: + ret = old_spawnve(mode, file, args, env) + finally: + spawn_lock.release() + if mode == os.P_WAIT: + pid, status = os.waitpid(ret, 0) + ret = status >> 8 + return ret + + os.spawnve = new_spawnve + + diff --git a/scons/gallium.py b/scons/gallium.py index 217478bd50..8082aba6f2 100644 --- a/scons/gallium.py +++ b/scons/gallium.py @@ -38,6 +38,8 @@ import SCons.Action import SCons.Builder import SCons.Scanner +import fixes + def quietCommandLines(env): # Quiet command lines -- cgit v1.2.3