[Bf-blender-cvs] [429771fed55] master: Add 'work around' to accessing data from volatile iterators in py API.
Bastien Montagne
noreply at git.blender.org
Wed Nov 30 17:04:49 CET 2022
Commit: 429771fed55119df4dfebcf1c8c3666f017fc0eb
Author: Bastien Montagne
Date: Wed Nov 30 16:52:10 2022 +0100
Branches: master
https://developer.blender.org/rB429771fed55119df4dfebcf1c8c3666f017fc0eb
Add 'work around' to accessing data from volatile iterators in py API.
Re T102550.
===================================================================
M doc/python_api/rst/info_gotcha.rst
===================================================================
diff --git a/doc/python_api/rst/info_gotcha.rst b/doc/python_api/rst/info_gotcha.rst
index 2dd6c3c92b1..e2a49898a4b 100644
--- a/doc/python_api/rst/info_gotcha.rst
+++ b/doc/python_api/rst/info_gotcha.rst
@@ -870,6 +870,26 @@ an issue but, due to internal implementation details, currently are:
thus breaking any current iteration over ``Collection.all_objects``.
+.. rubric:: Do not:
+
+.. code-block:: python
+
+ # `all_objects` is an iterator. Using it directly while performing operations on its members that will update
+ # the memory accessed by the `all_objects` iterator will lead to invalid memory accesses and crashes.
+ for object in bpy.data.collections["Collection"].all_objects:
+ object.hide_viewport = True
+
+
+.. rubric:: Do:
+
+.. code-block:: python
+
+ # `all_objects[:]` is an independent list generated from the iterator. As long as no objects are deleted,
+ # its content will remain valid even if the data accessed by the `all_objects` iterator is modified.
+ for object in bpy.data.collections["Collection"].all_objects[:]:
+ object.hide_viewport = True
+
+
sys.exit
========
More information about the Bf-blender-cvs
mailing list