pixman-renderer: Unref the pixman image when wl_shm_buffer is gone
Even if the weston_buffer_reference is still alive in situations like when we have closing animations, the underyling buffer (wl_shm_buffer) is no longer available. Call the appropriate destroy handler to invalidate the pixman image and avoid touch the shm_buffer. Fixes: #613 Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
This commit is contained in:
@@ -36,6 +36,7 @@
|
|||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "pixel-formats.h"
|
#include "pixel-formats.h"
|
||||||
#include "shared/helpers.h"
|
#include "shared/helpers.h"
|
||||||
|
#include "shared/signal.h"
|
||||||
|
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
||||||
@@ -489,6 +490,19 @@ draw_paint_node(struct weston_paint_node *pnode,
|
|||||||
if (!ps->image)
|
if (!ps->image)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* if we still have a reference, but the underlying buffer is no longer
|
||||||
|
* available signal that we should unref image_t as well. This happens
|
||||||
|
* when using close animations, with the reference surviving the
|
||||||
|
* animation while the underlying buffer went away as the client was
|
||||||
|
* terminated. This is a particular use-case and should probably be
|
||||||
|
* refactored to provide some analogue with the GL-renderer (as in, to
|
||||||
|
* still maintain the buffer and let the compositor dispose of it). */
|
||||||
|
if (ps->buffer_ref.buffer && !ps->buffer_ref.buffer->shm_buffer) {
|
||||||
|
pixman_image_unref(ps->image);
|
||||||
|
ps->image = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pixman_region32_init(&repaint);
|
pixman_region32_init(&repaint);
|
||||||
pixman_region32_intersect(&repaint,
|
pixman_region32_intersect(&repaint,
|
||||||
&pnode->view->transform.boundingbox, damage);
|
&pnode->view->transform.boundingbox, damage);
|
||||||
|
|||||||
Reference in New Issue
Block a user