summaryrefslogtreecommitdiff
path: root/libweston/pixman-renderer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libweston/pixman-renderer.c')
-rw-r--r--libweston/pixman-renderer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libweston/pixman-renderer.c b/libweston/pixman-renderer.c
index 9640b616..8677023c 100644
--- a/libweston/pixman-renderer.c
+++ b/libweston/pixman-renderer.c
@@ -49,6 +49,7 @@ struct pixman_surface_state {
pixman_image_t *image;
struct weston_buffer_reference buffer_ref;
+ struct weston_buffer_release_reference buffer_release_ref;
struct wl_listener buffer_destroy_listener;
struct wl_listener surface_destroy_listener;
@@ -625,6 +626,8 @@ pixman_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
pixman_format_code_t pixman_format;
weston_buffer_reference(&ps->buffer_ref, buffer);
+ weston_buffer_release_reference(&ps->buffer_release_ref,
+ es->buffer_release_ref.buffer_release);
if (ps->buffer_destroy_listener.notify) {
wl_list_remove(&ps->buffer_destroy_listener.link);
@@ -644,6 +647,7 @@ pixman_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
if (! shm_buffer) {
weston_log("Pixman renderer supports only SHM buffers\n");
weston_buffer_reference(&ps->buffer_ref, NULL);
+ weston_buffer_release_reference(&ps->buffer_release_ref, NULL);
return;
}
@@ -664,6 +668,7 @@ pixman_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
weston_log("Unsupported SHM buffer format 0x%x\n",
wl_shm_buffer_get_format(shm_buffer));
weston_buffer_reference(&ps->buffer_ref, NULL);
+ weston_buffer_release_reference(&ps->buffer_release_ref, NULL);
weston_buffer_send_server_error(buffer,
"disconnecting due to unhandled buffer type");
return;
@@ -702,6 +707,7 @@ pixman_renderer_surface_state_destroy(struct pixman_surface_state *ps)
ps->image = NULL;
}
weston_buffer_reference(&ps->buffer_ref, NULL);
+ weston_buffer_release_reference(&ps->buffer_release_ref, NULL);
free(ps);
}