[Mesa-dev] [PATCH] r600: clean up the GS ring buffers when the context is destroyed

Gert Wollny gert.wollny at collabora.com
Fri Nov 16 17:06:15 UTC 2018


I forgot: 

Fixes: 1371d65a7fbd695d3516861fe733685569d890d0
   r600g: initial support for geometry shaders on evergreen (v2)

Am Freitag, den 16.11.2018, 12:48 +0100 schrieb Gert Wollny:
> From: Gert Wollny <gert.wollny at collabora.com>
> 
> This fixes two memory leaks reported by ASAN:
> 
> Direct leak of 248 byte(s) in 1 object(s) allocated from:
>    in malloc (/usr/lib64/gcc/x86_64-pc-linux-
> gnu/7.3.0/libasan.so+0xdb880)
>    in r600_alloc_buffer_struct
> ../../samba/mesa/src/gallium/drivers/r600/r600_buffer_common.c:578
>    in r600_buffer_create
> ../../samba/mesa/src/gallium/drivers/r600/r600_buffer_common.c:600
>    in r600_resource_create_common
> ../../samba/mesa/src/gallium/drivers/r600/r600_pipe_common.c:1265
>    in r600_resource_create
> ../../samba/mesa/src/gallium/drivers/r600/r600_pipe.c:725
>    in pipe_buffer_create
> ../../samba/mesa/src/gallium/auxiliary/util/u_inlines.h:291
>    in update_gs_block_state
> ../../samba/mesa/src/gallium/drivers/r600/r600_state_common.c:1482
> 
> Direct leak of 248 byte(s) in 1 object(s) allocated from:
>    in malloc (/usr/lib64/gcc/x86_64-pc-linux-
> gnu/7.3.0/libasan.so+0xdb880)
>    in r600_alloc_buffer_struct
> ../../samba/mesa/src/gallium/drivers/r600/r600_buffer_common.c:578
>    in r600_buffer_create
> ../../samba/mesa/src/gallium/drivers/r600/r600_buffer_common.c:600
>    in r600_resource_create_common
> ../../samba/mesa/src/gallium/drivers/r600/r600_pipe_common.c:1265
>    in r600_resource_create
> ../../samba/mesa/src/gallium/drivers/r600/r600_pipe.c:722
>    in pipe_buffer_create
> ../../samba/mesa/src/gallium/auxiliary/util/u_inlines.h:291
>    in update_gs_block_state
> ../../samba/mesa/src/gallium/drivers/r600/r600_state_common.c:1489
> 
> Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
> ---
>  src/gallium/drivers/r600/r600_pipe.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/src/gallium/drivers/r600/r600_pipe.c
> b/src/gallium/drivers/r600/r600_pipe.c
> index 9e8501ff33..adf6ebc95f 100644
> --- a/src/gallium/drivers/r600/r600_pipe.c
> +++ b/src/gallium/drivers/r600/r600_pipe.c
> @@ -105,6 +105,12 @@ static void r600_destroy_context(struct
> pipe_context *context)
>  	}
>  	util_unreference_framebuffer_state(&rctx-
> >framebuffer.state);
>  
> +        if (rctx->gs_rings.gsvs_ring.buffer)
> +           pipe_resource_reference(&rctx->gs_rings.gsvs_ring.buffer, 
> NULL);
> +
> +        if (rctx->gs_rings.esgs_ring.buffer)
> +           pipe_resource_reference(&rctx->gs_rings.esgs_ring.buffer, 
> NULL);
> +
>  	for (sh = 0; sh < PIPE_SHADER_TYPES; ++sh)
>  		for (i = 0; i < PIPE_MAX_CONSTANT_BUFFERS; ++i)
>  			rctx->b.b.set_constant_buffer(context, sh,
> i, NULL);


More information about the mesa-dev mailing list