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