From 5f95ffe35034120189340cd413f24979da92109e Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 27 Jul 2016 10:59:09 +0200 Subject: [PATCH] Fix T48829: Memory leak on Blender Exit It was possible to have missing outlink but GPUNodes in material. --- source/blender/gpu/intern/gpu_codegen.c | 6 ++++++ source/blender/gpu/intern/gpu_codegen.h | 1 + source/blender/gpu/intern/gpu_material.c | 3 +++ 3 files changed, 10 insertions(+) diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index aec94f9f2cb..c40bc8eaf27 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -1732,3 +1732,9 @@ void GPU_pass_free(GPUPass *pass) MEM_freeN(pass->vertexcode); MEM_freeN(pass); } + +void GPU_pass_free_nodes(ListBase *nodes) +{ + gpu_nodes_free(nodes); +} + diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h index 417e46a83ee..7af17f9122d 100644 --- a/source/blender/gpu/intern/gpu_codegen.h +++ b/source/blender/gpu/intern/gpu_codegen.h @@ -183,6 +183,7 @@ void GPU_pass_update_uniforms(GPUPass *pass); void GPU_pass_unbind(GPUPass *pass); void GPU_pass_free(GPUPass *pass); +void GPU_pass_free_nodes(ListBase *nodes); void gpu_codegen_init(void); void gpu_codegen_exit(void); diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 4775d2ed30a..ed9718f1a17 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -270,6 +270,9 @@ static int GPU_material_construct_end(GPUMaterial *material, const char *passnam material->partangvel = GPU_shader_get_uniform(shader, GPU_builtin_name(GPU_PARTICLE_ANG_VELOCITY)); return 1; } + else { + GPU_pass_free_nodes(&material->nodes); + } return 0; }