aboutsummaryrefslogtreecommitdiff
path: root/mesalib/scons/fixes.py
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2010-12-29 12:20:21 +0000
committermarha <marha@users.sourceforge.net>2010-12-29 12:20:21 +0000
commit053f5dfd42ade05252e586a282e34906db10828d (patch)
treede215580ce205409a6d810a005c6c5909f3145d1 /mesalib/scons/fixes.py
parent04ceb8c4a0cca3d8682f094d1d6faed8f693afb5 (diff)
parent807c6931fe683fd844ceec1b023232181e6aae03 (diff)
downloadvcxsrv-053f5dfd42ade05252e586a282e34906db10828d.tar.gz
vcxsrv-053f5dfd42ade05252e586a282e34906db10828d.tar.bz2
vcxsrv-053f5dfd42ade05252e586a282e34906db10828d.zip
svn merge ^/branches/released .
Diffstat (limited to 'mesalib/scons/fixes.py')
-rw-r--r--mesalib/scons/fixes.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/mesalib/scons/fixes.py b/mesalib/scons/fixes.py
new file mode 100644
index 000000000..5946106ab
--- /dev/null
+++ b/mesalib/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
+
+