From d72d4666ba7625af731ee3decacc617db541c02e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 4 Jun 2026 10:07:45 +0200 Subject: [PATCH] radv: fix REPLAYED shader arena blocks not being marked as holes on free Because free_list is always NULL for REPLAYED arenas, freed blocks were never passed to add_hole() and freelist.prev was still NULL. So, adjacent blocks were never merged together and that caused a memleak with unreachable blocks. This fixes a memleak detected by ASAN in dEQP-VK.ray_tracing_pipeline.pipeline_library.configurations.singlethreaded_compilation.s0_l11_check_capture_replay_handles and similar tests. Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 4854714c58e..b1c4c287169 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -1398,6 +1398,9 @@ radv_free_shader_memory(struct radv_device *device, union radv_shader_arena_bloc free(arena); } else if (free_list) { add_hole(free_list, hole); + } else { + /* Mark it as a hole, allowing merges when adjacent blocks are freed later. */ + list_inithead(&hole->freelist); } mtx_unlock(&device->shader_arena_mutex);