[Bf-blender-cvs] [4c5537ed428] blender2.8: Copy on write: Make sure freeing evaluated mesh does not cause crash when re-evaluating the object

Sergey Sharybin noreply at git.blender.org
Thu Jul 27 15:23:00 CEST 2017


Commit: 4c5537ed428f33b2996f1965b93945a1c9d491b4
Author: Sergey Sharybin
Date:   Thu Jul 27 14:18:45 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB4c5537ed428f33b2996f1965b93945a1c9d491b4

Copy on write: Make sure freeing evaluated mesh does not cause crash when re-evaluating the object

===================================================================

M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/object_update.c

===================================================================

diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 858c60824fc..efe8498ace5 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -365,6 +365,8 @@ void BKE_object_free_derived_caches(Object *ob)
 	}
 
 	if (ob->mesh_evaluated != NULL) {
+		/* Restore initial pointer. */
+		ob->data = ob->mesh_evaluated->id.newid;
 		/* Evaluated mesh points to edit mesh, but does not own it. */
 		ob->mesh_evaluated->edit_btmesh = NULL;
 		BKE_mesh_free(ob->mesh_evaluated);
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index a478671d8a0..0bbfbb8a4e7 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -377,6 +377,11 @@ void BKE_object_eval_uber_data(EvaluationContext *eval_ctx,
 			/* NOTE: Watch out, some tools might need it!
 			 * So keep around for now..
 			 */
+			/* Store original ID as a pointer in evaluated ID.
+			 * This way we can restore original object data when we are freeing
+			 * evaluated mesh.
+			 */
+			new_mesh->id.newid = &mesh->id;
 		}
 #if 0
 		if (ob->derivedFinal != NULL) {




More information about the Bf-blender-cvs mailing list