diff options
author | José Fonseca <[email protected]> | 2009-07-14 11:09:23 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2009-07-14 12:21:25 +0100 |
commit | 7325c1ebc8cf88249d0adeadc0f52600e727c762 (patch) | |
tree | d0d88a93ff2cd9ec2fbfeeb8ede95753fdb98b23 /scons/fixes.py | |
parent | 4ed1de8b84b587d2be0c0e4ecb6b5f421195f562 (diff) |
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
Diffstat (limited to 'scons/fixes.py')
-rw-r--r-- | scons/fixes.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/scons/fixes.py b/scons/fixes.py new file mode 100644 index 00000000000..714cccf61d2 --- /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 + + |