From 5398363572309835c2f6c79d9487ae7420df1439 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Thu, 11 Jan 2018 16:03:47 -0300 Subject: [PATCH] solved particle memory leak, fixes #15591 --- scene/3d/particles.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/scene/3d/particles.cpp b/scene/3d/particles.cpp index 219464ae1fe..8617bbc2f66 100644 --- a/scene/3d/particles.cpp +++ b/scene/3d/particles.cpp @@ -1597,4 +1597,21 @@ ParticlesMaterial::ParticlesMaterial() : } ParticlesMaterial::~ParticlesMaterial() { + + if (material_mutex) + material_mutex->lock(); + + if (shader_map.has(current_key)) { + shader_map[current_key].users--; + if (shader_map[current_key].users == 0) { + //deallocate shader, as it's no longer in use + VS::get_singleton()->free(shader_map[current_key].shader); + shader_map.erase(current_key); + } + + VS::get_singleton()->material_set_shader(_get_material(), RID()); + } + + if (material_mutex) + material_mutex->unlock(); }