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
This commit is contained in:
José Fonseca
2009-07-14 11:09:23 +01:00
parent 4ed1de8b84
commit 7325c1ebc8
2 changed files with 29 additions and 0 deletions

27
scons/fixes.py Normal file
View File

@@ -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

View File

@@ -38,6 +38,8 @@ import SCons.Action
import SCons.Builder
import SCons.Scanner
import fixes
def quietCommandLines(env):
# Quiet command lines