Kaydet (Commit) b7fe432a authored tarafından Guido van Rossum's avatar Guido van Rossum

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.
üst 258ccd41
...@@ -322,10 +322,19 @@ def _execvpe(file, args, env=None): ...@@ -322,10 +322,19 @@ def _execvpe(file, args, env=None):
envpath = defpath envpath = defpath
PATH = envpath.split(pathsep) PATH = envpath.split(pathsep)
if not _notfound: if not _notfound:
import tempfile if sys.platform[:4] == 'beos':
# Exec a file that is guaranteed not to exist # Process handling (fork, wait) under BeOS (up to 5.0)
try: execv(tempfile.mktemp(), ('blah',)) # doesn't interoperate reliably with the thread interlocking
except error, _notfound: pass # 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
t = tempfile.mktemp()
# Exec a file that is guaranteed not to exist
try: execv(t, ('blah',))
except error, _notfound: pass
exc, arg = error, _notfound exc, arg = error, _notfound
for dir in PATH: for dir in PATH:
fullname = path.join(dir, file) fullname = path.join(dir, file)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment