summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2021-07-16 15:17:23 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2021-07-16 15:17:23 +0000
commit42d747f72efd776a575ea776ebb5c768282f44eb (patch)
tree783b553e9dee1a1e836bde107a2baa32a68d8831
parentb932b04b65f0851cbd63e89ee6067fd0a8d30a1b (diff)
parentf3c4735c0bef6325e977876e12fc476da363ec3c (diff)
downloadsqlalchemy-42d747f72efd776a575ea776ebb5c768282f44eb.tar.gz
Merge "apply list() around weakkeydictionary iteration"
-rw-r--r--doc/build/changelog/unreleased_14/6771.rst8
-rw-r--r--lib/sqlalchemy/orm/decl_api.py4
2 files changed, 10 insertions, 2 deletions
diff --git a/doc/build/changelog/unreleased_14/6771.rst b/doc/build/changelog/unreleased_14/6771.rst
new file mode 100644
index 000000000..811ee7d82
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/6771.rst
@@ -0,0 +1,8 @@
+.. change::
+ :tags: orm, bug
+ :tickets: 6771
+
+ Fixed an issue where clearing of mappers during things like test suite
+ teardowns could cause a "dictionary changed size" warning during garbage
+ collection, due to iteration of a weak-referencing dictionary. A ``list()``
+ has been applied to prevent concurrent GC from affecting this operation.
diff --git a/lib/sqlalchemy/orm/decl_api.py b/lib/sqlalchemy/orm/decl_api.py
index 54e927ee4..23b89a543 100644
--- a/lib/sqlalchemy/orm/decl_api.py
+++ b/lib/sqlalchemy/orm/decl_api.py
@@ -624,14 +624,14 @@ class registry(object):
return itertools.chain(
(
manager.mapper
- for manager in self._managers
+ for manager in list(self._managers)
if manager.is_mapped
and not manager.mapper.configured
and manager.mapper._ready_for_configure
),
(
npm
- for npm in self._non_primary_mappers
+ for npm in list(self._non_primary_mappers)
if not npm.configured and npm._ready_for_configure
),
)