mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 20:48:08 +02:00
st/mesa: don't leak pipe_surface if pipe_context is not current
We have found some pipe_surface leaks internally. This is the same code as surface_destroy in radeonsi. Ideally, surface_destroy would be in pipe_screen. Cc: 18.3 <mesa-stable@lists.freedesktop.org> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
fd82a1d1d6
commit
e986c1ca1d
2 changed files with 23 additions and 1 deletions
|
|
@ -154,6 +154,25 @@ pipe_resource_reference(struct pipe_resource **dst, struct pipe_resource *src)
|
|||
*dst = src;
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as pipe_surface_release, but used when pipe_context doesn't exist
|
||||
* anymore.
|
||||
*/
|
||||
static inline void
|
||||
pipe_surface_release_no_context(struct pipe_surface **ptr)
|
||||
{
|
||||
struct pipe_surface *surf = *ptr;
|
||||
|
||||
if (pipe_reference_described(&surf->reference, NULL,
|
||||
(debug_reference_descriptor)
|
||||
debug_describe_surface)) {
|
||||
/* trivially destroy pipe_surface */
|
||||
pipe_resource_reference(&surf->texture, NULL);
|
||||
free(surf);
|
||||
}
|
||||
*ptr = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set *dst to \p src with proper reference counting.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -285,8 +285,11 @@ st_renderbuffer_delete(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
|||
struct st_context *st = st_context(ctx);
|
||||
pipe_surface_release(st->pipe, &strb->surface_srgb);
|
||||
pipe_surface_release(st->pipe, &strb->surface_linear);
|
||||
strb->surface = NULL;
|
||||
} else {
|
||||
pipe_surface_release_no_context(&strb->surface_srgb);
|
||||
pipe_surface_release_no_context(&strb->surface_linear);
|
||||
}
|
||||
strb->surface = NULL;
|
||||
pipe_resource_reference(&strb->texture, NULL);
|
||||
free(strb->data);
|
||||
_mesa_delete_renderbuffer(ctx, rb);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue