PyAPI: Crash when trying to draw a PointerProperty in the UI. #93037

Open
opened 2021-11-12 13:15:32 +01:00 by Demeter Dzadik · 6 comments
Member

System Information
Operating system: Linux-5.8.0-7642-generic-x86_64-with-glibc2.32 64 Bits
Graphics card: GeForce RTX 2080/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 460.56

Blender Version
Broken: version: 3.1.0 Alpha, branch: master, commit date: 2021-11-10 12:53, hash: a6e4cb092e
Worked: (newest version of Blender that worked as expected)

Short description of error
My addon registers a PropertyGroup with a PointerProperty within, which wants to point at Objects.
This PropertyGroup is added to bpy.types.PoseBone.
Sometimes, when trying to draw this PointerProperty, Blender crashes.

The stack trace seems to be an infinite loop between these two asserts:

BLI_assert failed: source/blender/blenkernel/intern/idprop.c:741, IDP_GetPropertyFromGroup(), at 'prop->type == IDP_GROUP'
BLI_assert failed: source/blender/blenkernel/intern/idprop.c:687, IDP_AddToGroup(), at 'group->type == IDP_GROUP'

and with some other stuff in between.

Exact steps for others to reproduce the error

  • Zip of a .blend file and the addon (stripped down to just a few lines of code):
    property_draw_crash.zip
  • Note that although the addon was originally about bone gizmos, all the widget drawing related code is completely gone. It's now just a PropertyGroup, a PointerProperty, and a Panel, and nothing else.
  • Install the addon.
  • Open the Blend file. The Properties Editor should already be set to the Bone tab, with the Viewport Display panel opened, which is where the addon will attempt to draw the property.
  • Enable the addon. It should crash with the above stack trace.

props_draw_crash-2021-11-12_13.14.46.mp4

**System Information** Operating system: Linux-5.8.0-7642-generic-x86_64-with-glibc2.32 64 Bits Graphics card: GeForce RTX 2080/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 460.56 **Blender Version** Broken: version: 3.1.0 Alpha, branch: master, commit date: 2021-11-10 12:53, hash: `a6e4cb092e` Worked: (newest version of Blender that worked as expected) **Short description of error** My addon registers a PropertyGroup with a PointerProperty within, which wants to point at Objects. This PropertyGroup is added to bpy.types.PoseBone. Sometimes, when trying to draw this PointerProperty, Blender crashes. The stack trace seems to be an infinite loop between these two asserts: ``` BLI_assert failed: source/blender/blenkernel/intern/idprop.c:741, IDP_GetPropertyFromGroup(), at 'prop->type == IDP_GROUP' BLI_assert failed: source/blender/blenkernel/intern/idprop.c:687, IDP_AddToGroup(), at 'group->type == IDP_GROUP' ``` and with some other stuff in between. **Exact steps for others to reproduce the error** - Zip of a .blend file and the addon (stripped down to just a few lines of code): [property_draw_crash.zip](https://archive.blender.org/developer/F11796509/property_draw_crash.zip) - Note that although the addon was originally about bone gizmos, all the widget drawing related code is completely gone. It's now just a PropertyGroup, a PointerProperty, and a Panel, and nothing else. - Install the addon. - Open the Blend file. The Properties Editor should already be set to the Bone tab, with the Viewport Display panel opened, which is where the addon will attempt to draw the property. - Enable the addon. It should crash with the above stack trace. [props_draw_crash-2021-11-12_13.14.46.mp4](https://archive.blender.org/developer/F11796514/props_draw_crash-2021-11-12_13.14.46.mp4)
Author
Member

Added subscriber: @Mets

Added subscriber: @Mets
Member

Added subscriber: @PratikPB2123

Added subscriber: @PratikPB2123
Member

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Member

I can confirm.

Stack trace:
blender.exe         :0x00007FF76FF68CD0  bli_windows_system_backtrace_stack_thread C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\system_win32.c:233
blender.exe         :0x00007FF76FF67D50  BLI_windows_system_backtrace_stack C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\system_win32.c:320
blender.exe         :0x00007FF76FF67720  BLI_system_backtrace C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\system_win32.c:386
blender.exe         :0x00007FF76FF6C540  _BLI_assert_print_backtrace C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\BLI_assert.c:50
blender.exe         :0x00007FF76D936460  IDP_AddToGroup C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenkernel\intern\idprop.c:649
blender.exe         :0x00007FF76E757350  RNA_property_pointer_add C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_access.c:3619
blender.exe         :0x00007FF76E757520  RNA_property_pointer_get C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_access.c:3509
blender.exe         :0x00007FF76E0310D0  uiDefAutoButR C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\interface\interface_utils.c:315
blender.exe         :0x00007FF76DFBFBC0  ui_item_with_label C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\interface\interface_layout.c:1122
blender.exe         :0x00007FF76DFB25B0  uiItemFullR C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\interface\interface_layout.c:2347
blender.exe         :0x00007FF76E93EC70  rna_uiItemR C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_ui_api.c:139
blender.exe         :0x00007FF76E932FC0  UILayout_prop_call C:\Users\Pratik\Desktop\BlenderOSP\build_windows_Lite_x64_vc16_Release\source\blender\makesrna\intern\rna_ui_gen.c:1886
blender.exe         :0x00007FF76E7449D0  RNA_function_call C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_access.c:7336
blender.exe         :0x00007FF76ECBEFB0  pyrna_func_call C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\python\intern\bpy_rna.c:6304
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
python39_d.dll      :0x00007FFB6BB837FB  PyErr_SetExcInfo
blender.exe         :0x00007FF76ECC0D80  bpy_class_call C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\python\intern\bpy_rna.c:8546
blender.exe         :0x00007FF76E93C670  panel_draw C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_ui.c:145
blender.exe         :0x00007FF76D7C5A60  ed_panel_draw C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:2801
blender.exe         :0x00007FF76D7C5A60  ed_panel_draw C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:2829
blender.exe         :0x00007FF76D7C1650  ED_region_panels_layout_ex C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:3006
blender.exe         :0x00007FF76FD276E0  buttons_main_region_layout_properties C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\space_buttons\space_buttons.c:319
blender.exe         :0x00007FF76FD275D0  buttons_main_region_layout C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\space_buttons\space_buttons.c:515
blender.exe         :0x00007FF76D7BF230  ED_region_do_layout C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:526
blender.exe         :0x00007FF76D77E710  wm_draw_window_offscreen C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm_draw.c:682
blender.exe         :0x00007FF76D77E3C0  wm_draw_window C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm_draw.c:884
blender.exe         :0x00007FF76D77DDE0  wm_draw_update C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm_draw.c:1083
blender.exe         :0x00007FF76D72F500  WM_main C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm.c:646
blender.exe         :0x00007FF76D7268B0  main C:\Users\Pratik\Desktop\BlenderOSP\blender\source\creator\creator.c:564
blender.exe         :0x00007FF7702C00A0  invoke_main d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79
blender.exe         :0x00007FF7702BFE50  __scrt_common_main_seh d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
blender.exe         :0x00007FF7702BFE30  __scrt_common_main d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331
blender.exe         :0x00007FF7702C0160  mainCRTStartup d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17
KERNEL32.DLL        :0x00007FFBC3927020  BaseThreadInitThunk
ntdll.dll           :0x00007FFBC5842630  RtlUserThreadStart```
I can confirm. ```lines = 10 Stack trace: blender.exe :0x00007FF76FF68CD0 bli_windows_system_backtrace_stack_thread C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\system_win32.c:233 blender.exe :0x00007FF76FF67D50 BLI_windows_system_backtrace_stack C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\system_win32.c:320 blender.exe :0x00007FF76FF67720 BLI_system_backtrace C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\system_win32.c:386 blender.exe :0x00007FF76FF6C540 _BLI_assert_print_backtrace C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenlib\intern\BLI_assert.c:50 blender.exe :0x00007FF76D936460 IDP_AddToGroup C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\blenkernel\intern\idprop.c:649 blender.exe :0x00007FF76E757350 RNA_property_pointer_add C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_access.c:3619 blender.exe :0x00007FF76E757520 RNA_property_pointer_get C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_access.c:3509 blender.exe :0x00007FF76E0310D0 uiDefAutoButR C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\interface\interface_utils.c:315 blender.exe :0x00007FF76DFBFBC0 ui_item_with_label C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\interface\interface_layout.c:1122 blender.exe :0x00007FF76DFB25B0 uiItemFullR C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\interface\interface_layout.c:2347 blender.exe :0x00007FF76E93EC70 rna_uiItemR C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_ui_api.c:139 blender.exe :0x00007FF76E932FC0 UILayout_prop_call C:\Users\Pratik\Desktop\BlenderOSP\build_windows_Lite_x64_vc16_Release\source\blender\makesrna\intern\rna_ui_gen.c:1886 blender.exe :0x00007FF76E7449D0 RNA_function_call C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_access.c:7336 blender.exe :0x00007FF76ECBEFB0 pyrna_func_call C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\python\intern\bpy_rna.c:6304 python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo python39_d.dll :0x00007FFB6BB837FB PyErr_SetExcInfo blender.exe :0x00007FF76ECC0D80 bpy_class_call C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\python\intern\bpy_rna.c:8546 blender.exe :0x00007FF76E93C670 panel_draw C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\makesrna\intern\rna_ui.c:145 blender.exe :0x00007FF76D7C5A60 ed_panel_draw C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:2801 blender.exe :0x00007FF76D7C5A60 ed_panel_draw C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:2829 blender.exe :0x00007FF76D7C1650 ED_region_panels_layout_ex C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:3006 blender.exe :0x00007FF76FD276E0 buttons_main_region_layout_properties C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\space_buttons\space_buttons.c:319 blender.exe :0x00007FF76FD275D0 buttons_main_region_layout C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\space_buttons\space_buttons.c:515 blender.exe :0x00007FF76D7BF230 ED_region_do_layout C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\editors\screen\area.c:526 blender.exe :0x00007FF76D77E710 wm_draw_window_offscreen C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm_draw.c:682 blender.exe :0x00007FF76D77E3C0 wm_draw_window C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm_draw.c:884 blender.exe :0x00007FF76D77DDE0 wm_draw_update C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm_draw.c:1083 blender.exe :0x00007FF76D72F500 WM_main C:\Users\Pratik\Desktop\BlenderOSP\blender\source\blender\windowmanager\intern\wm.c:646 blender.exe :0x00007FF76D7268B0 main C:\Users\Pratik\Desktop\BlenderOSP\blender\source\creator\creator.c:564 blender.exe :0x00007FF7702C00A0 invoke_main d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79 blender.exe :0x00007FF7702BFE50 __scrt_common_main_seh d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288 blender.exe :0x00007FF7702BFE30 __scrt_common_main d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331 blender.exe :0x00007FF7702C0160 mainCRTStartup d:\A01\_work\12\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17 KERNEL32.DLL :0x00007FFBC3927020 BaseThreadInitThunk ntdll.dll :0x00007FFBC5842630 RtlUserThreadStart```
Author
Member

Added subscriber: @JulianEisel

Added subscriber: @JulianEisel
Author
Member

I've done some deep investigating with help of @Severin.

Issue is not in UI code, that's just the first thing that tries to access some crazy invalid data on the armature that I somehow created.
Here is how that armature got created:

  • I run a script, which creates a new armature with thousands of bones, constraints, etc.
  • Now I have two rigs: An old one, and a new one.
  • At the end of the script, I copy over the contents of the PropertyGroup on each PoseBone from the old rig to the new rig, like this (This is the problem!!):
old_gizmo_data = old_posebone.get('bone_gizmo')
new_posebone['bone_gizmo'] = old_gizmo_data
  • Then the script also runs old_rig.user_remap(new_rig), and then bpy.data.objects.remove(old_rig). Maybe these are also relevant.

The solution/workaround
Changing the way I copy the contents of the PropertyGroup over seems to fix the crash:

gizmo_properties_class = bpy.types.PropertyGroup.bl_rna_get_subclass_py('BoneGizmoProperties')
...
for key in gizmo_properties_class.__annotations__.keys():
    old_value = getattr(old_posebone.bone_gizmo, key)
    setattr(new_posebone.bone_gizmo, key, old_value)
I've done some deep investigating with help of @Severin. Issue is not in UI code, that's just the first thing that tries to access some crazy invalid data on the armature that I somehow created. Here is how that armature got created: - I run a script, which creates a new armature with thousands of bones, constraints, etc. - Now I have two rigs: An old one, and a new one. - At the end of the script, I copy over the contents of the PropertyGroup on each PoseBone from the old rig to the new rig, like this (This is the problem!!): ``` old_gizmo_data = old_posebone.get('bone_gizmo') new_posebone['bone_gizmo'] = old_gizmo_data ``` - Then the script also runs `old_rig.user_remap(new_rig)`, and then `bpy.data.objects.remove(old_rig)`. Maybe these are also relevant. **The solution/workaround** Changing the way I copy the contents of the PropertyGroup over seems to fix the crash: ``` gizmo_properties_class = bpy.types.PropertyGroup.bl_rna_get_subclass_py('BoneGizmoProperties') ... for key in gizmo_properties_class.__annotations__.keys(): old_value = getattr(old_posebone.bone_gizmo, key) setattr(new_posebone.bone_gizmo, key, old_value) ```
Philipp Oeser removed the
Interest
Python API
label 2023-02-10 09:04:29 +01:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#93037
No description provided.