[Mesa-dev] [PATCH] glsl: Hook up loop_variable_state destructor to plug a memory leak.
Ian Romanick
idr at freedesktop.org
Thu Jun 7 19:33:39 CEST 2012
On 06/05/2012 04:01 PM, Kenneth Graunke wrote:
> While ~loop_state() is already freeing the loop_variable_state objects
> via ralloc_free(this->mem_ctx), the ~loop_variable_state() destructor
> was never getting called, so the hash table inside loop_variable_state
> was never getting destroyed.
>
> Fixes a memory leak in any shader with loops.
>
> NOTE: This is a candidate for stable release branches.
>
> Signed-off-by: Kenneth Graunke<kenneth at whitecape.org>
> ---
> src/glsl/loop_analysis.h | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/src/glsl/loop_analysis.h b/src/glsl/loop_analysis.h
> index 8bed1db..05c982f 100644
> --- a/src/glsl/loop_analysis.h
> +++ b/src/glsl/loop_analysis.h
> @@ -140,6 +140,23 @@ public:
> {
> hash_table_dtor(this->var_hash);
> }
> +
> + static void* operator new(size_t size, void *ctx)
> + {
> + void *lvs = ralloc_size(ctx, size);
> + assert(lvs != NULL);
> +
> + ralloc_set_destructor(lvs, (void (*)(void*)) destructor);
> +
> + return lvs;
> + }
> +
> +private:
> + static void
> + destructor(loop_variable_state *lvs)
> + {
> + lvs->~loop_variable_state();
> + }
> };
>
>
This just looks wrong. :) Would it be better to have the real destructor
code here and ~loop_variable_state call this->destructor?
In my dream of dreams, we'd be able to either allocate objects via
ralloc or allocate (automatic) objects on the stack.
More information about the mesa-dev
mailing list