diff options
| author | Sergey Shepelev <temotor@gmail.com> | 2020-10-21 10:49:26 +0300 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2020-10-22 08:30:20 +0300 |
| commit | 55b06981ec6f4fbfae4fa381e95aca8f4a3e72db (patch) | |
| tree | e06a17c3efc65d8dff56019c3898f2e51c87dcf6 | |
| parent | 7b1aa58d77550caabba3ca2e0b1bb79626c83d9c (diff) | |
| download | eventlet-register-at-fork-v2.tar.gz | |
patcher: [py27] recursion error in pytest/python2.7 installing register_at_forkregister-at-fork-v2
https://github.com/eventlet/eventlet/issues/660
https://github.com/getsentry/sentry-python/pull/880
Could not reproduce problem without pytest, so normal production code was probably safe.
| -rw-r--r-- | eventlet/patcher.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/eventlet/patcher.py b/eventlet/patcher.py index 030fa54..b835c7b 100644 --- a/eventlet/patcher.py +++ b/eventlet/patcher.py @@ -1,5 +1,11 @@ import imp import sys +try: + # Only for this purpose, it's irrelevant if `os` was already patched. + # https://github.com/eventlet/eventlet/pull/661 + from os import register_at_fork +except ImportError: + register_at_fork = None import eventlet import six @@ -298,6 +304,7 @@ def monkey_patch(**on): # tell us whether or not we succeeded pass + _threading = original('threading') imp.acquire_lock() try: for name, mod in modules_to_patch: @@ -313,11 +320,13 @@ def monkey_patch(**on): if hasattr(orig_mod, attr_name): delattr(orig_mod, attr_name) - _os = original('os') - if name == 'threading' and hasattr(_os, 'register_at_fork'): + # https://github.com/eventlet/eventlet/issues/592 + if name == 'threading' and register_at_fork: def fix_threading_active( - _global_dict=original('threading').current_thread.__globals__, - _patched=orig_mod + _global_dict=_threading.current_thread.__globals__, + # alias orig_mod as patched to reflect its new state + # https://github.com/eventlet/eventlet/pull/661#discussion_r509877481 + _patched=orig_mod, ): _prefork_active = [None] @@ -328,7 +337,7 @@ def monkey_patch(**on): def after_fork(): _global_dict['_active'] = _prefork_active[0] - _os.register_at_fork( + register_at_fork( before=before_fork, after_in_parent=after_fork) fix_threading_active() |
