[Mesa-dev] [PATCH] glsl: avoid leaking linked gl_shader when there's a late linker error
Ilia Mirkin
imirkin at alum.mit.edu
Sun May 17 14:56:44 PDT 2015
Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---
Just happened to notice it... still not the leak I'm chasing :( The
only time this can happen is basically when it's unhappy about the
clip distance usage (i.e. clipvertex + clipdistance at the same time).
src/glsl/linker.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 21cfc77..ce43f06 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -3269,8 +3269,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:
@@ -3289,8 +3292,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);
}
--
2.3.6
More information about the mesa-dev
mailing list