[New-bugs-announce] [issue6476] MSVCRT's spawnve/spawnvpe are not thread safe

Jose Fonseca report at bugs.python.org
Mon Jul 13 19:11:08 CEST 2009


New submission from Jose Fonseca <jose.r.fonseca at gmail.com>:

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.

----------
components: Interpreter Core
files: spawnve.py
messages: 90495
nosy: jfonseca
severity: normal
status: open
title: MSVCRT's spawnve/spawnvpe are not thread safe
type: crash
versions: Python 2.4, Python 2.5, Python 2.6
Added file: http://bugs.python.org/file14495/spawnve.py

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue6476>
_______________________________________


More information about the New-bugs-announce mailing list