[Bf-blender-cvs] [326255d] object_nodes: Fix a memleak of the return value user counter from mesh_ptr.

Lukas Tönne noreply at git.blender.org
Wed Jan 13 11:03:10 CET 2016


Commit: 326255d080cae6030f76a9f3f4ad686c1ead6b40
Author: Lukas Tönne
Date:   Wed Jan 13 10:56:31 2016 +0100
Branches: object_nodes
https://developer.blender.org/rB326255d080cae6030f76a9f3f4ad686c1ead6b40

Fix a memleak of the return value user counter from mesh_ptr.

The returned mesh_ptr result needs to be cleared to ensure the user
counter is also freed. To avoid deleting the mesh data as well a new
function 'reset' was added, which frees the user counter but only resets
the data pointer without freeing it.

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

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

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

diff --git a/source/blender/blenvm/intern/bvm_api.cc b/source/blender/blenvm/intern/bvm_api.cc
index ff37731..839bb67 100644
--- a/source/blender/blenvm/intern/bvm_api.cc
+++ b/source/blender/blenvm/intern/bvm_api.cc
@@ -1131,7 +1131,9 @@ struct DerivedMesh *BVM_eval_modifier(struct BVMEvalGlobals *globals,
 	
 	_CTX(ctx)->eval_function(_GLOBALS(globals), _FUNC(fn), args, results);
 	
-	return result.get();
+	DerivedMesh *dm = result.get();
+	result.reset();
+	return dm;
 }
 
 /* ------------------------------------------------------------------------- */
diff --git a/source/blender/blenvm/util/bvm_util_data_ptr.h b/source/blender/blenvm/util/bvm_util_data_ptr.h
index 2644ad3..e87d4fd 100644
--- a/source/blender/blenvm/util/bvm_util_data_ptr.h
+++ b/source/blender/blenvm/util/bvm_util_data_ptr.h
@@ -72,7 +72,20 @@ struct node_data_ptr {
 	{
 	}
 	
-	element_type* get() const { return m_data; }
+	element_type* get() const
+	{
+		return m_data;
+	}
+	
+	void reset()
+	{
+		m_data = 0;
+		if (m_refs) {
+			destroy_refs(m_refs);
+			m_refs = 0;
+		}
+	}
+	
 	void set(element_type *data)
 	{
 		if (m_data != data) {
@@ -90,6 +103,10 @@ struct node_data_ptr {
 		assert(m_refs == 0);
 		if (use_count > 0)
 			m_refs = create_refs(use_count);
+		else if (m_refs) {
+			destroy_refs(m_refs);
+			m_refs = 0;
+		}
 	}
 	
 	void decrement_use_count()




More information about the Bf-blender-cvs mailing list