Skip to content

Commit f0cfc1b

Browse files
Patrick LerdaMarge Bot
Patrick Lerda
authored and
Marge Bot
committed
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) waydroid#1 0xaf10f896 in draw_create_fragment_shader ../src/gallium/auxiliary/draw/draw_fs.c:47 waydroid#2 0xaef64619 in i915_create_fs_state ../src/gallium/drivers/i915/i915_state.c:550 waydroid#3 0xae16a955 in ureg_create_shader ../src/gallium/auxiliary/tgsi/tgsi_ureg.c:2194 waydroid#4 0xae17f45f in ureg_create_shader_with_so_and_destroy ../src/gallium/auxiliary/tgsi/tgsi_ureg.h:150 waydroid#5 0xae17f45f in ureg_create_shader_and_destroy ../src/gallium/auxiliary/tgsi/tgsi_ureg.h:159 waydroid#6 0xae17f45f in util_make_fs_blit_zs ../src/gallium/auxiliary/util/u_simple_shaders.c:365 waydroid#7 0xaf13300e in blitter_get_fs_texfetch_depth ../src/gallium/auxiliary/util/u_blitter.c:1157 waydroid#8 0xaf13300e in util_blitter_cache_all_shaders ../src/gallium/auxiliary/util/u_blitter.c:1322 waydroid#9 0xaef6b738 in i915_create_context ../src/gallium/drivers/i915/i915_context.c:233 waydroid#10 0xacb33c49 in st_api_create_context ../src/mesa/state_tracker/st_manager.c:986 waydroid#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: 1a69b50 ("i915g: Fix point sprites.") Signed-off-by: Patrick Lerda <[email protected]> Reviewed-by: Emma Anholt <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27570>
1 parent 5af5f50 commit f0cfc1b

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/gallium/drivers/i915/i915_state.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,7 @@ i915_bind_fs_state(struct pipe_context *pipe, void *shader)
640640
static void
641641
i915_delete_fs_state(struct pipe_context *pipe, void *shader)
642642
{
643+
struct i915_context *i915 = i915_context(pipe);
643644
struct i915_fragment_shader *ifs = (struct i915_fragment_shader *)shader;
644645

645646
ralloc_free(ifs->error);
@@ -648,6 +649,13 @@ i915_delete_fs_state(struct pipe_context *pipe, void *shader)
648649
FREE((struct tgsi_token *)ifs->state.tokens);
649650
ifs->state.tokens = NULL;
650651

652+
if (ifs->draw_data) {
653+
if (likely(i915))
654+
draw_delete_fragment_shader(i915->draw, ifs->draw_data);
655+
else
656+
draw_delete_fragment_shader(NULL, ifs->draw_data);
657+
}
658+
651659
ifs->program_len = 0;
652660

653661
FREE(ifs);

0 commit comments

Comments
 (0)