Mesa (mesa_7_5_branch): scons: Monkey patch os. spawnve on Windows to become thread safe.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Tue Jul 14 11:21:51 UTC 2009


Module: Mesa
Branch: mesa_7_5_branch
Commit: 7325c1ebc8cf88249d0adeadc0f52600e727c762
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7325c1ebc8cf88249d0adeadc0f52600e727c762

Author: José Fonseca <jfonseca at vmware.com>
Date:   Tue Jul 14 11:09:23 2009 +0100

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(+), 0 deletions(-)

diff --git a/scons/fixes.py b/scons/fixes.py
new file mode 100644
index 0000000..714cccf
--- /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 217478b..8082aba 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




More information about the mesa-commit mailing list