Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Oates <aoates>2022-09-29 11:17:22 +0300
committerSergey Sharybin <sergey@blender.org>2022-09-29 11:35:18 +0300
commit4bdba62cb94978c94d29150d2fd426ca18aa8d0d (patch)
treef3cca8f09238037f75bd2797353561d5b36b29a9 /source/blender/makesrna/intern/rna_armature.c
parent039429faeb4160cc26b283c7309c9cb9d87ee7c0 (diff)
Fix T94441: fix crash parenting object to a bone
This crash occurs when the bone is newly created. In certain circumstances the depsgraph data for the armature is not updated, causing `pchan_eval` to be NULL when the parent is updated. This causes a segfault in `ED_object_parent_set` when the flags are updated. This change fixes the underlying depsgraph bug, and also adds both an assertion and NULL pointer check to `ED_object_parent_set` to better handle this scenario if it recurs via another path. Maniphest Tasks: T94441 Differential Revision: https://developer.blender.org/D16065
Diffstat (limited to 'source/blender/makesrna/intern/rna_armature.c')
-rw-r--r--source/blender/makesrna/intern/rna_armature.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index f83ec0dc09b..e6b1ea1321c 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -38,6 +38,13 @@
# include "DEG_depsgraph.h"
# include "DEG_depsgraph_build.h"
+static void rna_Armature_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+ ID *id = ptr->owner_id;
+
+ DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
+}
+
static void rna_Armature_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
ID *id = ptr->owner_id;
@@ -1365,6 +1372,7 @@ static void rna_def_armature_bones(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Bone", "Armature's active bone");
RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_bone_set", NULL, NULL);
+ RNA_def_property_update(prop, 0, "rna_Armature_update");
/* TODO: redraw. */
/* RNA_def_property_collection_active(prop, prop_act); */
@@ -1389,7 +1397,7 @@ static void rna_def_armature_edit_bones(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_pointer_sdna(prop, NULL, "act_edbone");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active EditBone", "Armatures active edit bone");
- // RNA_def_property_update(prop, 0, "rna_Armature_act_editbone_update");
+ RNA_def_property_update(prop, 0, "rna_Armature_update");
RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_edit_bone_set", NULL, NULL);
/* TODO: redraw. */