summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.pick_status.json2
-rw-r--r--src/gallium/auxiliary/util/u_live_shader_cache.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json
index abd9f5b6a08..e35ba3eb7c8 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -220,7 +220,7 @@
"description": "gallium/util: Fix leak in the live shader cache",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "4bb919b0b8b4ed6f6a7049c3f8d294b74b50e198"
},
diff --git a/src/gallium/auxiliary/util/u_live_shader_cache.c b/src/gallium/auxiliary/util/u_live_shader_cache.c
index 9c59b5fd3cf..b24689537b1 100644
--- a/src/gallium/auxiliary/util/u_live_shader_cache.c
+++ b/src/gallium/auxiliary/util/u_live_shader_cache.c
@@ -125,8 +125,11 @@ util_live_shader_cache_get(struct pipe_context *ctx,
simple_mtx_unlock(&cache->lock);
/* 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.