Home | History | Annotate | Download | only in scons
      1 import sys
      2 
      3 # Monkey patch os.spawnve on windows to become thread safe
      4 if sys.platform == 'win32':
      5     import os
      6     import threading
      7     from os import spawnve as old_spawnve
      8 
      9     spawn_lock = threading.Lock()
     10 
     11     def new_spawnve(mode, file, args, env):
     12         spawn_lock.acquire()
     13         try:
     14             if mode == os.P_WAIT:
     15                 ret = old_spawnve(os.P_NOWAIT, file, args, env)
     16             else:
     17                 ret = old_spawnve(mode, file, args, env)
     18         finally:
     19             spawn_lock.release()
     20         if mode == os.P_WAIT:
     21             pid, status = os.waitpid(ret, 0)
     22             ret = status >> 8
     23         return ret
     24 
     25     os.spawnve = new_spawnve
     26 
     27 
     28