mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-18 21:10:35 +02:00
i915: fix draw_create_fragment_shader() related memory leak
For instance, this issue is triggered with "piglit/bin/fcc-blit-between-clears -auto -fbo":
Direct leak of 16400 byte(s) in 5 object(s) allocated from:
#0 0xb720689a in __interceptor_calloc (/usr/lib/libasan.so.6+0xb289a)
#1 0xaf10f896 in draw_create_fragment_shader ../src/gallium/auxiliary/draw/draw_fs.c:47
#2 0xaef64619 in i915_create_fs_state ../src/gallium/drivers/i915/i915_state.c:550
#3 0xae16a955 in ureg_create_shader ../src/gallium/auxiliary/tgsi/tgsi_ureg.c:2194
#4 0xae17f45f in ureg_create_shader_with_so_and_destroy ../src/gallium/auxiliary/tgsi/tgsi_ureg.h:150
#5 0xae17f45f in ureg_create_shader_and_destroy ../src/gallium/auxiliary/tgsi/tgsi_ureg.h:159
#6 0xae17f45f in util_make_fs_blit_zs ../src/gallium/auxiliary/util/u_simple_shaders.c:365
#7 0xaf13300e in blitter_get_fs_texfetch_depth ../src/gallium/auxiliary/util/u_blitter.c:1157
#8 0xaf13300e in util_blitter_cache_all_shaders ../src/gallium/auxiliary/util/u_blitter.c:1322
#9 0xaef6b738 in i915_create_context ../src/gallium/drivers/i915/i915_context.c:233
#10 0xacb33c49 in st_api_create_context ../src/mesa/state_tracker/st_manager.c:986
#11 0xac845740 in dri_create_context ../src/gallium/frontends/dri/dri_context.c:178
#12 0xac854d97 in driCreateContextAttribs ../src/gallium/frontends/dri/dri_util.c:631
#13 0xb6ce79a3 in dri2_create_context_attribs ../src/glx/dri2_glx.c:240
#14 0xb6c9606f in dri_common_create_context ../src/glx/dri_common.c:665
#15 0xb6ca4f00 in CreateContext ../src/glx/glxcmds.c:322
#16 0xb6ca5c0b in glXCreateNewContext ../src/glx/glxcmds.c:1449
Fixes: 1a69b50b3b ("i915g: Fix point sprites.")
Signed-off-by: Patrick Lerda <patrick9876@free.fr>
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27570>
This commit is contained in:
parent
5af5f508b1
commit
f0cfc1bbdc
1 changed files with 8 additions and 0 deletions
|
|
@ -640,6 +640,7 @@ i915_bind_fs_state(struct pipe_context *pipe, void *shader)
|
|||
static void
|
||||
i915_delete_fs_state(struct pipe_context *pipe, void *shader)
|
||||
{
|
||||
struct i915_context *i915 = i915_context(pipe);
|
||||
struct i915_fragment_shader *ifs = (struct i915_fragment_shader *)shader;
|
||||
|
||||
ralloc_free(ifs->error);
|
||||
|
|
@ -648,6 +649,13 @@ i915_delete_fs_state(struct pipe_context *pipe, void *shader)
|
|||
FREE((struct tgsi_token *)ifs->state.tokens);
|
||||
ifs->state.tokens = NULL;
|
||||
|
||||
if (ifs->draw_data) {
|
||||
if (likely(i915))
|
||||
draw_delete_fragment_shader(i915->draw, ifs->draw_data);
|
||||
else
|
||||
draw_delete_fragment_shader(NULL, ifs->draw_data);
|
||||
}
|
||||
|
||||
ifs->program_len = 0;
|
||||
|
||||
FREE(ifs);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue