[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