From 2cb9ff694670a8c8ea3f53cb3e7cb5066c399fe5 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Fri, 29 May 2026 07:49:44 -0500 Subject: [PATCH] fix 8119: Fix ReferenceError in snap object cache lookup Cached SnapObj entries holding references to freed Blender objects raised ReferenceError on .obj.name access. Evict stale entries at the start of create_snap_obj. Generated with the assistance of an AI coding tool. --- src/bonsai/bonsai/tool/raycast.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index dc45b4e9bb..918e90fd11 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -888,6 +888,15 @@ class Raycast(bonsai.core.tool.Raycast): def create_snap_obj(cls, obj): if obj.data is None or not isinstance(obj.data, bpy.types.Mesh): return None + # Evict cached entries whose Blender object has since been freed. + valid = [] + for s in cls.snap_objs: + try: + _ = s.obj.name + valid.append(s) + except ReferenceError: + pass + cls.snap_objs[:] = valid for i, snap_obj in enumerate(cls.snap_objs): if obj.name == snap_obj.obj.name: # Handle objects modified while a modal operator is active.