Message90495
MSVCRT's implementation of _spawnve, _spawnvpe, or any version that
takes an environ as paramater is not thread-safe, because it stores a
temporary environment string into a global variable.
_spawnve, _spawnvpe, and friends call a function named _cenvarg which
concatenate the environment strings into a global variable called
_aenvptr, which gets free'd and zero'd after each invocation.
This was causing random build failures in scons when parallel build (-j)
was enabled.
The sample application evidences this problem. It also includes a simple
workaround in python, by acquiring a global lock around os.spawnve, and
simulating P_WAIT with P_NOWAIT to avoid holding the global lock while
the child process is running. I believe something along these lines
should be done for CPython on Windows. |
|
Date |
User |
Action |
Args |
2009-07-13 17:11:09 | jfonseca | set | recipients:
+ jfonseca |
2009-07-13 17:11:08 | jfonseca | set | messageid: <1247505068.9.0.23655949974.issue6476@psf.upfronthosting.co.za> |
2009-07-13 17:11:07 | jfonseca | link | issue6476 messages |
2009-07-13 17:11:07 | jfonseca | create | |
|