From c324c19765f743b3ad1dbf749bc77f374636b34f Mon Sep 17 00:00:00 2001 From: YimingWu Date: Sat, 11 May 2024 08:58:20 +0200 Subject: [PATCH] Fix #121021: Avoid size change of `addon_modules` during iteration Copy modules before filtering `addon_modules` to avoid change of dictionnary size during iterations. Otherwise errors can be triggerd when running `python -m pytest test.py` since it may modify the module dict. Co-authored-by: Alexis-19 Pull Request: https://projects.blender.org/blender/blender/pulls/121100 --- scripts/modules/addon_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/modules/addon_utils.py b/scripts/modules/addon_utils.py index fb6c6f98a72..e30eccefce6 100644 --- a/scripts/modules/addon_utils.py +++ b/scripts/modules/addon_utils.py @@ -584,8 +584,9 @@ def disable_all(): # # Either way, running 3rd party logic here can cause undefined behavior. # Use direct `__dict__` access to bypass `__getattr__`, see: #111649. + modules = sys.modules.copy() addon_modules = [ - item for item in sys.modules.items() + item for item in modules.items() if type(mod_dict := getattr(item[1], "__dict__", None)) is dict if mod_dict.get("__addon_enabled__") ]