[Bf-blender-cvs] [4c31bed6b46] blender2.8: Fix T57981: Crash entering sculpt mode
Sergey Sharybin
noreply at git.blender.org
Fri Nov 30 01:47:28 CET 2018
Commit: 4c31bed6b462db32bf2c2eabf6af932428a65f25
Author: Sergey Sharybin
Date: Fri Nov 30 11:46:42 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB4c31bed6b462db32bf2c2eabf6af932428a65f25
Fix T57981: Crash entering sculpt mode
===================================================================
M source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
===================================================================
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index 636b270fe83..89d3740c43e 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -131,7 +131,6 @@ void nested_id_hack_discard_pointers(ID *id_cow)
SPECIAL_CASE(ID_LS, FreestyleLineStyle, nodetree)
SPECIAL_CASE(ID_LA, Lamp, nodetree)
SPECIAL_CASE(ID_MA, Material, nodetree)
- SPECIAL_CASE(ID_SCE, Scene, nodetree)
SPECIAL_CASE(ID_TE, Tex, nodetree)
SPECIAL_CASE(ID_WO, World, nodetree)
@@ -139,6 +138,17 @@ void nested_id_hack_discard_pointers(ID *id_cow)
SPECIAL_CASE(ID_LT, Lattice, key)
SPECIAL_CASE(ID_ME, Mesh, key)
+ case ID_SCE:
+ {
+ Scene *scene_cow = (Scene *)id_cow;
+ /* Node trees always have their own ID node in the graph, and are
+ * being copied as part of their copy-on-write process. */
+ scene_cow->nodetree = NULL;
+ /* Tool settings pointer is shared with the original scene. */
+ scene_cow->toolsettings = NULL;
+ break;
+ }
+
case ID_OB:
{
/* Clear the ParticleSettings pointer to prevent doubly-freeing it. */
@@ -174,7 +184,6 @@ const ID *nested_id_hack_get_discarded_pointers(NestedIDHackTempStorage *storage
SPECIAL_CASE(ID_LS, FreestyleLineStyle, nodetree, linestyle)
SPECIAL_CASE(ID_LA, Lamp, nodetree, lamp)
SPECIAL_CASE(ID_MA, Material, nodetree, material)
- SPECIAL_CASE(ID_SCE, Scene, nodetree, scene)
SPECIAL_CASE(ID_TE, Tex, nodetree, tex)
SPECIAL_CASE(ID_WO, World, nodetree, world)
@@ -182,6 +191,14 @@ const ID *nested_id_hack_get_discarded_pointers(NestedIDHackTempStorage *storage
SPECIAL_CASE(ID_LT, Lattice, key, lattice)
SPECIAL_CASE(ID_ME, Mesh, key, mesh)
+ case ID_SCE:
+ {
+ storage->scene = *(Scene *)id;
+ storage->scene.toolsettings = NULL;
+ storage->scene.nodetree = NULL;
+ return &storage->scene.id;
+ }
+
# undef SPECIAL_CASE
default:
@@ -629,6 +646,7 @@ void update_special_pointers(const Depsgraph *depsgraph,
{
Scene *scene_cow = (Scene *)id_cow;
const Scene *scene_orig = (const Scene *)id_orig;
+ scene_cow->toolsettings = scene_orig->toolsettings;
scene_cow->eevee.light_cache = scene_orig->eevee.light_cache;
break;
}
@@ -1003,6 +1021,7 @@ void discard_mesh_edit_mode_pointers(ID *id_cow)
void discard_scene_pointers(ID *id_cow)
{
Scene *scene_cow = (Scene *)id_cow;
+ scene_cow->toolsettings = NULL;
scene_cow->eevee.light_cache = NULL;
}
More information about the Bf-blender-cvs
mailing list