[Mesa-dev] [PATCH] i965: fix blorp stage_prog_data->param leak

Emil Velikov emil.l.velikov at gmail.com
Fri Oct 27 14:28:51 UTC 2017


On 27 October 2017 at 14:53, Lionel Landwerlin
<lionel.g.landwerlin at intel.com> wrote:
> On 27/10/17 14:46, Emil Velikov wrote:
>>
>> On 27 October 2017 at 13:55, Tapani Pälli <tapani.palli at intel.com> wrote:
>>>
>>> Patch uses mem_ctx for allocation to ensure param array gets freed
>>> later, in blorp clear case this happens in blorp_params_get_clear_kernel.
>>>
>>> ==6164== 48 bytes in 1 blocks are definitely lost in loss record 61 of
>>> 193
>>> ==6164==    at 0x4C2EB6B: malloc (vg_replace_malloc.c:299)
>>> ==6164==    by 0x12E31C6C: ralloc_size (ralloc.c:121)
>>> ==6164==    by 0x130189F1: fs_visitor::assign_constant_locations()
>>> (brw_fs.cpp:2095)
>>> ==6164==    by 0x13022D32: fs_visitor::optimize() (brw_fs.cpp:5715)
>>> ==6164==    by 0x13024D5A: fs_visitor::run_fs(bool, bool)
>>> (brw_fs.cpp:6229)
>>> ==6164==    by 0x1302549A: brw_compile_fs (brw_fs.cpp:6570)
>>> ==6164==    by 0x130C4B07: blorp_compile_fs (blorp.c:194)
>>> ==6164==    by 0x130D384B: blorp_params_get_clear_kernel
>>> (blorp_clear.c:79)
>>> ==6164==    by 0x130D3C56: blorp_fast_clear (blorp_clear.c:332)
>>> ==6164==    by 0x12EFA439: do_single_blorp_clear (brw_blorp.c:1261)
>>> ==6164==    by 0x12EFC4AF: brw_blorp_clear_color (brw_blorp.c:1326)
>>> ==6164==    by 0x12EFF72B: brw_clear (brw_clear.c:297)
>>>
>>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>>> ---
>>>   src/intel/compiler/brw_fs.cpp | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/src/intel/compiler/brw_fs.cpp
>>> b/src/intel/compiler/brw_fs.cpp
>>> index 4616529abc..6b27c38be7 100644
>>> --- a/src/intel/compiler/brw_fs.cpp
>>> +++ b/src/intel/compiler/brw_fs.cpp
>>> @@ -2092,7 +2092,7 @@ fs_visitor::assign_constant_locations()
>>>       */
>>>      uint32_t *param = stage_prog_data->param;
>>>      stage_prog_data->nr_params = num_push_constants;
>>> -   stage_prog_data->param = ralloc_array(NULL, uint32_t,
>>> num_push_constants);
>>> +   stage_prog_data->param = ralloc_array(mem_ctx, uint32_t,
>>> num_push_constants);
>>
>> I'm likely having a dull moment:
>> isn't param/stage_prog_data->param freed (via ralloc_free) at the end
>> of the function?
>
>
> The old one is freed, here we create a new one.
I'm a genius, indeed is. Thanks for Lionel.

-Emil
Note to self: Don't skip afternoon coffee :-\


More information about the mesa-dev mailing list