diff options
Diffstat (limited to 'libweston/pixman-renderer.c')
-rw-r--r-- | libweston/pixman-renderer.c | 6 |
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); } |