[Mesa-dev] [PATCH] glsl: Fix memory leak in builtin_builder::_image_prototype.
Ian Romanick
idr at freedesktop.org
Thu Oct 2 11:28:35 PDT 2014
Since this is Curro's code, I'm CC'ing me.
On 10/01/2014 03:12 AM, Iago Toral Quiroga wrote:
> in_var calls the ir_variable constructor, which dups the variable name.
> ---
> src/glsl/builtin_functions.cpp | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp
> index 5a024cb..7d61fcc 100644
> --- a/src/glsl/builtin_functions.cpp
> +++ b/src/glsl/builtin_functions.cpp
> @@ -4465,9 +4465,11 @@ builtin_builder::_image_prototype(const glsl_type *image_type,
> sig->parameters.push_tail(in_var(glsl_type::int_type, "sample"));
>
> /* Data arguments. */
> - for (unsigned i = 0; i < num_arguments; ++i)
> - sig->parameters.push_tail(in_var(data_type,
> - ralloc_asprintf(NULL, "arg%d", i)));
> + for (unsigned i = 0; i < num_arguments; ++i) {
> + char *arg_name = ralloc_asprintf(NULL, "arg%d", i);
> + sig->parameters.push_tail(in_var(data_type, arg_name));
> + ralloc_free(arg_name);
> + }
Using a NULL memory context is generally bad... precisely because it
often leads to memory leaks.
There are a couple ways to fix this. Since all of the image functions
have a limited number of parameters, we could either:
- Have a fixed size buffer that we snprintf to.
- Have a table of all the parameter names.
- Since this is the function prototype, I don't think we need names for
the parameters at all. Just pass NULL?
> /* Set the maximal set of qualifiers allowed for this image
> * built-in. Function calls with arguments having fewer
>
More information about the mesa-dev
mailing list