Merge "Check if subprocess module is patched directly"

This commit is contained in:
Zuul 2024-11-29 10:11:17 +00:00 committed by Gerrit Code Review
commit cfb8cc7e4b
3 changed files with 15 additions and 21 deletions

View File

@ -42,25 +42,19 @@ if os.name == 'nt':
category=DeprecationWarning)
# NOTE(bnemec): eventlet doesn't monkey patch subprocess, so we need to
# determine the proper subprocess module to use ourselves. I'm using the
# time module as the check because that's a monkey patched module we use
# in combination with subprocess below, so they need to match.
eventlet = importutils.try_import('eventlet')
eventlet_patched = eventlet and eventlet.patcher.is_monkey_patched(time)
if eventlet_patched:
if os.name == 'nt':
# subprocess.Popen.communicate will spawn two threads consuming
# stdout/stderr when passing data through stdin. We need to make
# sure that *native* threads will be used as pipes are blocking
# on Windows.
# Recent eventlet versions actually do patch subprocess.
subprocess = eventlet.patcher.original('subprocess')
subprocess.threading = eventlet.patcher.original('threading')
else:
from eventlet.green import subprocess
if eventlet:
from eventlet import tpool
eventlet_patched = (eventlet and
eventlet.patcher.is_monkey_patched('subprocess'))
if eventlet_patched and os.name == 'nt':
# subprocess.Popen.communicate will spawn two threads consuming
# stdout/stderr when passing data through stdin. We need to make
# sure that *native* threads will be used as pipes are blocking
# on Windows.
subprocess = eventlet.patcher.original('subprocess')
subprocess.threading = eventlet.patcher.original('threading')
else:
import subprocess
@ -397,9 +391,9 @@ def execute(*cmd, **kwargs):
stderr=_PIPE,
close_fds=close_fds,
preexec_fn=on_preexec_fn,
shell=shell, # nosec:B604
shell=shell,
cwd=cwd,
env=env_variables)
env=env_variables) # nosec:B602
if on_execute:
on_execute(obj)

View File

@ -34,4 +34,4 @@ console_scripts =
[extras]
eventlet =
eventlet>=0.27.0 # MIT
eventlet>=0.35.2 # MIT

View File

@ -2,4 +2,4 @@ oslotest>=3.2.0 # Apache-2.0
coverage>=4.0 # Apache-2.0
fixtures>=3.0.0 # Apache-2.0/BSD
stestr>=2.0.0 # Apache-2.0
eventlet>=0.27.0 # MIT
eventlet>=0.35.2 # MIT