From 24a5165cdf9f9181b3904837efde7fe03ea7c8be Mon Sep 17 00:00:00 2001 From: Patrick Lerda Date: Tue, 2 Apr 2024 17:16:06 +0200 Subject: [PATCH] r300: fix constants_remap_table memory leak related to the dummy shader path A last memory leak related to constants_remap_table is happening. This memory leak is triggered by two deqp-gles2 tests. For instance, this issue is triggered with "deqp-gles2 --deqp-case=dEQP-GLES2.functional.uniform_api.random.13": Direct leak of 336 byte(s) in 1 object(s) allocated from: #0 0x7f1b4a5de7ef in __interceptor_malloc (/usr/lib64/libasan.so.6+0xb17ef) #1 0x7f1b401a2cdf in rc_remove_unused_constants ../src/gallium/drivers/r300/compiler/radeon_remove_constants.c:101 #2 0x7f1b40185386 in rc_run_compiler_passes ../src/gallium/drivers/r300/compiler/radeon_compiler.c:476 #3 0x7f1b40185625 in rc_run_compiler ../src/gallium/drivers/r300/compiler/radeon_compiler.c:498 #4 0x7f1b401c14d2 in r3xx_compile_fragment_program ../src/gallium/drivers/r300/compiler/r3xx_fragprog.c:172 #5 0x7f1b401b669a in r300_translate_fragment_shader ../src/gallium/drivers/r300/r300_fs.c:516 #6 0x7f1b401baf73 in r300_pick_fragment_shader ../src/gallium/drivers/r300/r300_fs.c:592 #7 0x7f1b40128db7 in r300_create_fs_state ../src/gallium/drivers/r300/r300_state.c:1071 #8 0x7f1b3e67799d in st_create_fp_variant ../src/mesa/state_tracker/st_program.c:1073 #9 0x7f1b3e680285 in st_get_fp_variant ../src/mesa/state_tracker/st_program.c:1119 #10 0x7f1b3e6812fa in st_precompile_shader_variant ../src/mesa/state_tracker/st_program.c:1284 #11 0x7f1b3e6812fa in st_finalize_program ../src/mesa/state_tracker/st_program.c:1363 #12 0x7f1b3f13d501 in st_link_glsl_to_nir ../src/mesa/state_tracker/st_glsl_to_nir.cpp:754 #13 0x7f1b3f13d501 in st_link_shader ../src/mesa/state_tracker/st_glsl_to_nir.cpp:990 #14 0x7f1b3efeef75 in link_program ../src/mesa/main/shaderapi.c:1336 #15 0x7f1b3efeef75 in link_program_error ../src/mesa/main/shaderapi.c:1445 Fixes: 29df85788a7f ("r300: fix constants_remap_table memory leak") Signed-off-by: Patrick Lerda Part-of: --- src/gallium/drivers/r300/r300_fs.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gallium/drivers/r300/r300_fs.c b/src/gallium/drivers/r300/r300_fs.c index c442dbcf787..fd39caa7368 100644 --- a/src/gallium/drivers/r300/r300_fs.c +++ b/src/gallium/drivers/r300/r300_fs.c @@ -509,6 +509,7 @@ static void r300_translate_fragment_shader( } free(compiler.code->constants.Constants); + free(compiler.code->constants_remap_table); rc_destroy(&compiler.Base); r300_dummy_fragment_shader(r300, shader); return;