Monkey patch original current_thread _active

Monkey patch the original current_thread to use the up-to-date _active
global variable. This solution is based on that documented at:
https://github.com/eventlet/eventlet/issues/592

Change-Id: Icb26c43a71accdb4658ad6087fb3226f9a1090c0
Story: 2007614
This commit is contained in:
Chris MacNaughton 2020-05-06 15:04:07 +02:00
parent 4b489435e1
commit 4706b6c295
No known key found for this signature in database
GPG Key ID: 74BAF13D12E6A841

View File

@ -44,11 +44,20 @@ if HUB_TYPE == 'eventlet':
import traceback import traceback
getcurrent = eventlet.getcurrent getcurrent = eventlet.getcurrent
patch = eventlet.monkey_patch
sleep = eventlet.sleep sleep = eventlet.sleep
listen = eventlet.listen listen = eventlet.listen
connect = eventlet.connect connect = eventlet.connect
def patch(thread=True):
eventlet.monkey_patch(thread=thread)
if thread:
# Monkey patch the original current_thread to use the up-to-date _active
# global variable. See https://bugs.launchpad.net/bugs/1863021 and
# https://github.com/eventlet/eventlet/issues/592
import __original_module_threading as orig_threading # noqa
import threading # noqa
orig_threading.current_thread.__globals__['_active'] = threading._active
def spawn(*args, **kwargs): def spawn(*args, **kwargs):
raise_error = kwargs.pop('raise_error', False) raise_error = kwargs.pop('raise_error', False)