diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-07-16 11:34:13 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-07-16 11:34:13 -0400 |
| commit | a25d6ead9cf6d2d51ae67e53eac50f642a0bb432 (patch) | |
| tree | a6fbc2a44f2c768773ec8da961afc89725bdf7b3 /lib/sqlalchemy/event | |
| parent | 42d747f72efd776a575ea776ebb5c768282f44eb (diff) | |
| download | sqlalchemy-a25d6ead9cf6d2d51ae67e53eac50f642a0bb432.tar.gz | |
guard against unexpected weakref cleanups
Added some guards against ``KeyError`` in the event system to accommodate
the case that the interpreter is shutting down at the same time
:meth:`_engine.Engine.dispose` is being called, which would cause stack
trace warnings.
Fixes: #6740
Change-Id: I2c42e9edac2371e68b39d8360494c5fddfd6cd8c
Diffstat (limited to 'lib/sqlalchemy/event')
| -rw-r--r-- | lib/sqlalchemy/event/registry.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/sqlalchemy/event/registry.py b/lib/sqlalchemy/event/registry.py index 1f7cc43f1..ca85f3368 100644 --- a/lib/sqlalchemy/event/registry.py +++ b/lib/sqlalchemy/event/registry.py @@ -112,8 +112,18 @@ def _stored_in_collection_multi(newowner, oldowner, elements): for listen_fn in elements: listen_ref = weakref.ref(listen_fn) - key = old_listener_to_key[listen_ref] - dispatch_reg = _key_to_collection[key] + try: + key = old_listener_to_key[listen_ref] + except KeyError: + # can occur during interpreter shutdown. + # see #6740 + continue + + try: + dispatch_reg = _key_to_collection[key] + except KeyError: + continue + if newowner in dispatch_reg: assert dispatch_reg[newowner] == listen_ref else: |
