mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-05 11:08:12 +02:00
xlib/shm: Discard damage upon shm finish
Both to make sure we do not leak the memory, but to also prevent _cairo_xlib_surface_put_shm() from operating upon the finished shm surface after the display is closed. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=58253 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
b5dcc8ce44
commit
2ed484817e
3 changed files with 13 additions and 0 deletions
|
|
@ -59,6 +59,9 @@ struct _cairo_damage {
|
|||
cairo_private cairo_damage_t *
|
||||
_cairo_damage_create (void);
|
||||
|
||||
cairo_private cairo_damage_t *
|
||||
_cairo_damage_create_in_error (cairo_status_t status);
|
||||
|
||||
cairo_private cairo_damage_t *
|
||||
_cairo_damage_add_box (cairo_damage_t *damage,
|
||||
const cairo_box_t *box);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,13 @@
|
|||
|
||||
static const cairo_damage_t __cairo_damage__nil = { CAIRO_STATUS_NO_MEMORY };
|
||||
|
||||
cairo_damage_t *
|
||||
_cairo_damage_create_in_error (cairo_status_t status)
|
||||
{
|
||||
_cairo_error_throw (status);
|
||||
return (cairo_damage_t *) &__cairo_damage__nil;
|
||||
}
|
||||
|
||||
cairo_damage_t *
|
||||
_cairo_damage_create (void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -710,6 +710,9 @@ _cairo_xlib_shm_surface_finish (void *abstract_surface)
|
|||
cairo_xlib_display_t *display;
|
||||
cairo_status_t status;
|
||||
|
||||
_cairo_damage_destroy (shm->image.base.damage);
|
||||
shm->image.base.damage = _cairo_damage_create_in_error (CAIRO_STATUS_SURFACE_FINISHED);
|
||||
|
||||
status = _cairo_xlib_display_acquire (shm->image.base.device, &display);
|
||||
if (unlikely (status))
|
||||
return status;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue