[Bf-blender-cvs] [0b8514a99cb] functions: fix memory leak
Jacques Lucke
noreply at git.blender.org
Fri Sep 6 16:56:00 CEST 2019
Commit: 0b8514a99cbb0ba64c7627633ef94576cf052891
Author: Jacques Lucke
Date: Fri Sep 6 15:32:04 2019 +0200
Branches: functions
https://developer.blender.org/rB0b8514a99cbb0ba64c7627633ef94576cf052891
fix memory leak
===================================================================
M source/blender/blenkernel/BKE_falloff.hpp
M source/blender/simulations/bparticles/particle_function.cpp
M source/blender/simulations/bparticles/particle_function.hpp
===================================================================
diff --git a/source/blender/blenkernel/BKE_falloff.hpp b/source/blender/blenkernel/BKE_falloff.hpp
index f1f96398624..f3ba0d1d572 100644
--- a/source/blender/blenkernel/BKE_falloff.hpp
+++ b/source/blender/blenkernel/BKE_falloff.hpp
@@ -6,6 +6,10 @@ namespace BKE {
class Falloff {
public:
+#ifdef WITH_CXX_GUARDEDALLOC
+ MEM_CXX_CLASS_ALLOC_FUNCS("BKE:Falloff")
+#endif
+
virtual ~Falloff()
{
}
diff --git a/source/blender/simulations/bparticles/particle_function.cpp b/source/blender/simulations/bparticles/particle_function.cpp
index 89d059c8049..463ed83a32c 100644
--- a/source/blender/simulations/bparticles/particle_function.cpp
+++ b/source/blender/simulations/bparticles/particle_function.cpp
@@ -97,6 +97,7 @@ std::unique_ptr<ParticleFunctionResult> ParticleFunction::compute(ArrayRef<uint>
result->m_fn_no_deps = m_fn_no_deps.ptr();
result->m_fn_with_deps = m_fn_with_deps.ptr();
result->m_output_indices = m_output_indices;
+ result->m_pindices = pindices;
this->init_without_deps(result);
this->init_with_deps(result, pindices, attributes, particle_times, action_context);
diff --git a/source/blender/simulations/bparticles/particle_function.hpp b/source/blender/simulations/bparticles/particle_function.hpp
index c3695f2557c..4d255c0f8d4 100644
--- a/source/blender/simulations/bparticles/particle_function.hpp
+++ b/source/blender/simulations/bparticles/particle_function.hpp
@@ -31,6 +31,7 @@ class ParticleFunctionResult {
FN::Function *m_fn_no_deps;
FN::Function *m_fn_with_deps;
ArrayRef<uint> m_output_indices;
+ ArrayRef<uint> m_pindices;
friend ParticleFunction;
@@ -41,6 +42,26 @@ class ParticleFunctionResult {
~ParticleFunctionResult()
{
+ /* Free elements in buffers. */
+ for (uint i = 0; i < m_only_first.size(); i++) {
+ uint output_index = m_output_indices[i];
+ if (m_only_first[i]) {
+ auto &type_info = m_fn_no_deps->output_type(output_index)->extension<CPPTypeInfo>();
+ void *ptr = m_buffers[i];
+ type_info.destruct(ptr);
+ }
+ else {
+ auto &type_info = m_fn_with_deps->output_type(output_index)->extension<CPPTypeInfo>();
+ if (!type_info.trivially_destructible()) {
+ void *ptr = m_buffers[i];
+ for (uint pindex : m_pindices) {
+ type_info.destruct(POINTER_OFFSET(ptr, type_info.size() * pindex));
+ }
+ }
+ }
+ }
+
+ /* Free buffers. */
for (uint i = 0; i < m_buffers.size(); i++) {
BLI_temporary_deallocate(m_buffers[i]);
}
More information about the Bf-blender-cvs
mailing list