This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author jfonseca
Recipients jfonseca
Date 2009-07-13.17:11:06
SpamBayes Score 1.7266744e-12
Marked as misclassified No
Message-id <1247505068.9.0.23655949974.issue6476@psf.upfronthosting.co.za>
In-reply-to
Content
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.
History
Date User Action Args
2009-07-13 17:11:09jfonsecasetrecipients: + jfonseca
2009-07-13 17:11:08jfonsecasetmessageid: <1247505068.9.0.23655949974.issue6476@psf.upfronthosting.co.za>
2009-07-13 17:11:07jfonsecalinkissue6476 messages
2009-07-13 17:11:07jfonsecacreate