aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Davy <[email protected]>2020-05-10 20:12:56 +0200
committerMarge Bot <[email protected]>2020-05-11 19:42:37 +0000
commit47bfc799da61aadd60ef9cc5c4bf0651c519cc77 (patch)
treef1266c52d249ca0a7c69bca70e63757664867983
parent412e29c277774391c461d0f62c47e54d2f17814a (diff)
gallium/util: Fix leak in the live shader cache
When the nir backend is used, the create_shader call is supposed to release state->ir.nir. When the cache hits, create_shader is not called, thus state->ir.nir should be freed. There is nothing to be done for the TGSI case as the tokens release is done by the caller. This fixes a leak noticed in: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2931 Fixes: 4bb919b0b8b4ed6f6a7049c3f8d294b74b50e198 Signed-off-by: Axel Davy <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4980>
-rw-r--r--src/gallium/auxiliary/util/u_live_shader_cache.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/util/u_live_shader_cache.c b/src/gallium/auxiliary/util/u_live_shader_cache.c
index a32c3748257..15f387b4931 100644
--- a/src/gallium/auxiliary/util/u_live_shader_cache.c
+++ b/src/gallium/auxiliary/util/u_live_shader_cache.c
@@ -129,8 +129,11 @@ util_live_shader_cache_get(struct pipe_context *ctx,
*cache_hit = (shader != NULL);
/* Return if the shader already exists. */
- if (shader)
+ if (shader) {
+ if (state->type == PIPE_SHADER_IR_NIR)
+ ralloc_free(state->ir.nir);
return shader;
+ }
/* The cache mutex is unlocked to allow multiple create_shader
* invocations to run simultaneously.