Prevent a potential recursion error in `wait_for_either`.
continuous-integration/drone/push Build is passing Details

We shouldn't overwrite `event._set` and `event._clear` if those values
have already been set.

Those attributes hold the original references to `Event.set` and
`Event.clear` respectively, and the `OrEvent` logic overwrites them with
a callback-based logic.

This shouldn't happen if those attributes are already present.
This commit is contained in:
Fabio Manganiello 2024-04-14 23:27:13 +02:00
parent 699f92e42b
commit 7c504685e2
Signed by: blacklight
GPG Key ID: D90FBA7F76362774
1 changed files with 5 additions and 2 deletions

View File

@ -24,8 +24,11 @@ def OrEvent(*events, cls: Type = threading.Event):
or_event.clear()
def _to_or(e, changed_callback: Callable[[], None]):
e._set = e.set
e._clear = e.clear
if not hasattr(e, "_set"):
e._set = e.set
if not hasattr(e, "_clear"):
e._clear = e.clear
e.changed = changed_callback
e.set = lambda: _or_set(e)
e.clear = lambda: _clear_or(e)