mesa: do not leak ctx->Shader.ReferencedProgram references
authorJose Dapena Paz <jose.dapena@lge.com>
Thu, 24 May 2018 17:56:24 +0000 (19:56 +0200)
committerTimothy Arceri <tarceri@itsqueeze.com>
Fri, 25 May 2018 00:38:09 +0000 (10:38 +1000)
When glUseProgram is used, references to the included shaders are
added in ctx->Shader.ReferencedProgram. But those references are not
decreased when the shader data is deallocated. Thus, those shaders
are leaked.

Explicitely remove the pending references to these shaders.

Fixes: e6506b3cd23 ("mesa: retain gl_shader_programs after glDeleteProgram if they are in use")
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/mesa/main/shaderapi.c

index caa42541cad648b70343f6852dd9e8a2350e3498..f7080847cc1828ef9d66cdccff9662a1a17059e5 100644 (file)
@@ -159,6 +159,9 @@ _mesa_free_shader_state(struct gl_context *ctx)
 {
    for (int i = 0; i < MESA_SHADER_STAGES; i++) {
       _mesa_reference_program(ctx, &ctx->Shader.CurrentProgram[i], NULL);
+      _mesa_reference_shader_program(ctx,
+                                     &ctx->Shader.ReferencedPrograms[i],
+                                     NULL);
    }
    _mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram, NULL);