[Bf-blender-cvs] [0ab9e48] object_nodes: Fix for unfreed memory of the default empty mesh.

Lukas Tönne noreply at git.blender.org
Tue Nov 24 09:44:47 CET 2015


Commit: 0ab9e4848d68ade3903c25cfea12ea982aefc2ae
Author: Lukas Tönne
Date:   Sat Nov 21 17:00:27 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB0ab9e4848d68ade3903c25cfea12ea982aefc2ae

Fix for unfreed memory of the default empty mesh.

When using a static variable for this it needs to be destroyed explicitly.

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

M	source/blender/blenvm/intern/bvm_api.cc
M	source/blender/blenvm/util/bvm_util_typedesc.h

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

diff --git a/source/blender/blenvm/intern/bvm_api.cc b/source/blender/blenvm/intern/bvm_api.cc
index d54d3e9..a9d1878 100644
--- a/source/blender/blenvm/intern/bvm_api.cc
+++ b/source/blender/blenvm/intern/bvm_api.cc
@@ -55,15 +55,30 @@ extern "C" {
 
 #include "bvm_util_map.h"
 #include "bvm_util_thread.h"
+#include "bvm_util_typedesc.h"
 
 void BVM_init(void)
 {
+	/* note: static variable for DerivedMesh does not work well,
+	 * this needs to be created/freed explicitly
+	 */
+	DerivedMesh *dm = CDDM_new(0, 0, 0, 0, 0);
+	dm->needsFree = 0;
+	bvm::__empty_mesh__.set(dm);
+	
 	bvm::register_opcode_node_types();
 }
 
 void BVM_free(void)
 {
 	BVM_texture_cache_clear();
+	
+	/* note: static variable for DerivedMesh does not work well,
+	 * this needs to be created/freed explicitly
+	 */
+	DerivedMesh *dm = bvm::__empty_mesh__.get();
+	dm->needsFree = 1;
+	dm->release(dm);
 }
 
 /* ------------------------------------------------------------------------- */
diff --git a/source/blender/blenvm/util/bvm_util_typedesc.h b/source/blender/blenvm/util/bvm_util_typedesc.h
index 77f34ff..2bb1b79 100644
--- a/source/blender/blenvm/util/bvm_util_typedesc.h
+++ b/source/blender/blenvm/util/bvm_util_typedesc.h
@@ -298,18 +298,7 @@ struct DerivedMeshDestructor {
 
 typedef node_data_ptr<DerivedMesh, DerivedMeshDestructor> mesh_ptr;
 
-namespace detail {
-
-static mesh_ptr create_empty_mesh()
-{
-	DerivedMesh *dm = CDDM_new(0, 0, 0, 0, 0);
-	dm->needsFree = 0;
-	return mesh_ptr(dm);
-}
-
-}
-
-static const mesh_ptr __empty_mesh__ = detail::create_empty_mesh();
+static mesh_ptr __empty_mesh__ = mesh_ptr(0);
 
 
 template <BVMType type>




More information about the Bf-blender-cvs mailing list