diff options
author | Ilia Mirkin <imirkin@alum.mit.edu> | 2015-05-17 17:56:44 -0400 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2015-05-27 11:46:28 +0100 |
commit | 5eef18390d540d679aaeb664fdb2deb7d56e74ae (patch) | |
tree | 9d5d8c2071bb244f2ac8a9729233ea29badfa01a | |
parent | 34ff020aeac214976bdc152dc5009be9534c6ed7 (diff) | |
download | mesa-5eef18390d540d679aaeb664fdb2deb7d56e74ae.tar.gz |
glsl: avoid leaking linked gl_shader when there's a late linker error
This makes piglit mixing-clip-distance-and-clip-vertex-disallowed have 0
definitely lost blocks with valgrind. (Same non-0 number of possibly
lost blocks though.)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Cc: "10.5 10.6" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 5646f0f18a620292524eebcd77353ff3d3687eb2)
-rw-r--r-- | src/glsl/linker.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index ecdc025710f..2aa9f05a3f0 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -2829,8 +2829,11 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) link_intrastage_shaders(mem_ctx, ctx, prog, shader_list[stage], num_shaders[stage]); - if (!prog->LinkStatus) + if (!prog->LinkStatus) { + if (sh) + ctx->Driver.DeleteShader(ctx, sh); goto done; + } switch (stage) { case MESA_SHADER_VERTEX: @@ -2843,8 +2846,11 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) validate_fragment_shader_executable(prog, sh); break; } - if (!prog->LinkStatus) + if (!prog->LinkStatus) { + if (sh) + ctx->Driver.DeleteShader(ctx, sh); goto done; + } _mesa_reference_shader(ctx, &prog->_LinkedShaders[stage], sh); } |