mirror of
https://github.com/python/cpython.git
synced 2025-09-02 23:18:25 +00:00
Fix by Donn Cave for BeOS (SF #403642):
UNIX style fork/execve/wait are not fully compatible with thread support on BeOS. For Python, that means neither fork() from import nor import from a fork work reliably. os._execvpe() does the latter, importing tempfile to set up a tantalizing target for hackers. This patch replaces both the tempfile name generation and the exec that uses it, in case we're on BeOS. Need this for setup:distutils:execvp(); symptoms are random crashes and internal BeOS error messages about th name, in case we're on BeOS. It's an issue because setup.py + distutils calls os.execvp(); symptoms are random crashes during setup.py, and internal BeOS error messages about thread IDs.
This commit is contained in:
parent
258ccd4126
commit
b7fe432a88
1 changed files with 13 additions and 4 deletions
11
Lib/os.py
11
Lib/os.py
|
@ -322,9 +322,18 @@ def _execvpe(file, args, env=None):
|
||||||
envpath = defpath
|
envpath = defpath
|
||||||
PATH = envpath.split(pathsep)
|
PATH = envpath.split(pathsep)
|
||||||
if not _notfound:
|
if not _notfound:
|
||||||
|
if sys.platform[:4] == 'beos':
|
||||||
|
# Process handling (fork, wait) under BeOS (up to 5.0)
|
||||||
|
# doesn't interoperate reliably with the thread interlocking
|
||||||
|
# that happens during an import. The actual error we need
|
||||||
|
# is the same on BeOS for posix.open() et al., ENOENT.
|
||||||
|
try: unlink('/_#.# ## #.#')
|
||||||
|
except error, _notfound: pass
|
||||||
|
else:
|
||||||
import tempfile
|
import tempfile
|
||||||
|
t = tempfile.mktemp()
|
||||||
# Exec a file that is guaranteed not to exist
|
# Exec a file that is guaranteed not to exist
|
||||||
try: execv(tempfile.mktemp(), ('blah',))
|
try: execv(t, ('blah',))
|
||||||
except error, _notfound: pass
|
except error, _notfound: pass
|
||||||
exc, arg = error, _notfound
|
exc, arg = error, _notfound
|
||||||
for dir in PATH:
|
for dir in PATH:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue