Refactor wayland buffer releasing

This code should've been common but wasn't, so this might fix some
resource leaks.
This commit is contained in:
Derek Foreman 2017-06-23 10:24:44 -05:00
parent e6f17dee5d
commit acd0e4b036
1 changed files with 18 additions and 10 deletions

View File

@ -132,6 +132,21 @@ _e_pixmap_image_clear_x(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
#endif
#ifdef HAVE_WAYLAND
static void
_e_pixmap_wl_resource_release(E_Comp_Wl_Buffer *buffer)
{
buffer->busy--;
if (buffer->busy) return;
if (buffer->pool)
{
wl_shm_pool_unref(buffer->pool);
buffer->pool = NULL;
}
wl_resource_queue_event(buffer->resource, WL_BUFFER_RELEASE);
}
static void
_e_pixmap_wayland_buffer_release(E_Pixmap *cp, E_Comp_Wl_Buffer *buffer)
{
@ -148,12 +163,7 @@ _e_pixmap_wayland_buffer_release(E_Pixmap *cp, E_Comp_Wl_Buffer *buffer)
return;
}
buffer->busy--;
if (buffer->busy) return;
wl_resource_queue_event(buffer->resource, WL_BUFFER_RELEASE);
wl_shm_pool_unref(buffer->pool);
buffer->pool = NULL;
_e_pixmap_wl_resource_release(buffer);
}
static void
@ -649,10 +659,8 @@ e_pixmap_resource_set(E_Pixmap *cp, void *resource)
if (cp->buffer == resource) return;
if (cp->buffer)
{
cp->buffer->busy--;
if (!cp->buffer->busy) wl_resource_queue_event(cp->buffer->resource, WL_BUFFER_RELEASE);
}
_e_pixmap_wl_resource_release(cp->buffer);
if (cp->buffer_destroy_listener.notify)
{
wl_list_remove(&cp->buffer_destroy_listener.link);