Skip to content

Commit

Permalink
r600/sfn: fix memory leak related to sh_info->arrays
Browse files Browse the repository at this point in the history
For instance, with "piglit/bin/shader_runner tests/spec/glsl-1.10/execution/glsl-vs-arrays-2.shader_test -auto -fbo":
Direct leak of 12 byte(s) in 1 object(s) allocated from:
    #0 0x7f33c3f3d097 in operator new[](unsigned long) (/usr/lib64/libasan.so.6+0xb3097)
    android-rpi#1 0x7f33b9af1e5b in r600::ValueFactory::get_shader_info(r600_shader*) ../src/gallium/drivers/r600/sfn/sfn_valuefactory.cpp:1056
    android-rpi#2 0x7f33b9a96860 in r600::Shader::get_shader_info(r600_shader*) ../src/gallium/drivers/r600/sfn/sfn_shader.cpp:1445
    android-rpi#3 0x7f33b99ddd07 in r600_shader_from_nir ../src/gallium/drivers/r600/sfn/sfn_nir.cpp:1032
    #4 0x7f33b9c3e701 in r600_pipe_shader_create ../src/gallium/drivers/r600/r600_shader.c:231

Fixes: 79ca456 ("r600/sfn: rewrite NIR backend")
Signed-off-by: Patrick Lerda <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22262>
(cherry picked from commit e45fa93)
  • Loading branch information
Patrick Lerda authored and dcbaker-intel committed Apr 26, 2023
1 parent 4626445 commit d4b5259
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .pick_status.json
Original file line number Diff line number Diff line change
Expand Up @@ -2294,7 +2294,7 @@
"description": "r600/sfn: fix memory leak related to sh_info->arrays",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "79ca456b4837b3bc21cf9ef3c03c505c4b4909f6",
"notes": null
Expand Down
3 changes: 3 additions & 0 deletions src/gallium/drivers/r600/r600_shader.c
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,9 @@ void r600_pipe_shader_destroy(struct pipe_context *ctx UNUSED, struct r600_pipe_
if (list_is_linked(&shader->shader.bc.cf))
r600_bytecode_clear(&shader->shader.bc);
r600_release_command_buffer(&shader->command_buffer);

if (shader->shader.arrays)
free(shader->shader.arrays);
}

/*
Expand Down
3 changes: 2 additions & 1 deletion src/gallium/drivers/r600/sfn/sfn_valuefactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1053,7 +1053,8 @@ ValueFactory::get_shader_info(r600_shader *sh_info)
if (!arrays.empty()) {

sh_info->num_arrays = arrays.size();
sh_info->arrays = new r600_shader_array[arrays.size()];
sh_info->arrays =
(r600_shader_array *)malloc(sizeof(struct r600_shader_array) * arrays.size());

for (auto& arr : arrays) {
sh_info->arrays->gpr_start = arr->sel();
Expand Down

0 comments on commit d4b5259

Please sign in to comment.