[Mesa-dev] [PATCH 1/2] linker: fix strdup memory leak

Ian Romanick idr at freedesktop.org
Fri Dec 16 10:46:11 PST 2011


On 12/14/2011 11:26 PM, Pekka Paalanen wrote:
> string_to_uint_map::put() already does a strdup() for the key argument,
> so we leak the memory allocated by strdup() in link_uniforms.cpp.
>
> Remove the extra strdup(), fixes a few Valgrind detected leaks.

Have you run piglit on this?  I seem to recall adding the extra strdup 
for a reason.  The hash table keeps a copy of the key pointer passed to 
it, and the underlying object may be deleted before the hash table is 
deleted.  This can happen if the back-end optimizes some uniforms away 
after the linker has generated the list of "active" uniforms.  I'm 
pretty sure there were one or two test cases that hit this on i965.

> Signed-off-by: Pekka Paalanen<ppaalanen at gmail.com>
> ---
>   src/glsl/link_uniforms.cpp |    3 +--
>   1 files changed, 1 insertions(+), 2 deletions(-)
>
> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
> index c7de480..f6094d7 100644
> --- a/src/glsl/link_uniforms.cpp
> +++ b/src/glsl/link_uniforms.cpp
> @@ -174,8 +174,7 @@ private:
>         if (this->map->get(id, name))
>   	 return;
>
> -      char *key = strdup(name);
> -      this->map->put(this->num_active_uniforms, key);
> +      this->map->put(this->num_active_uniforms, name);
>
>         /* Each leaf uniform occupies one entry in the list of active
>          * uniforms.


More information about the mesa-dev mailing list