Don't delete busy E_Comp_Wl_Buffers

Hardware planes are going to make E_Comp_Wl_Buffer lifetimes harder to
manage, so we need to let the E_Comp_Wl_Buffer object outlive the
resource attached to it.

We already track a busy count, so we just have to use it to prevent
deleting a busy buffer.
This commit is contained in:
Derek Foreman 2017-06-23 10:27:51 -05:00
parent acd0e4b036
commit 18fbd1da32
3 changed files with 11 additions and 1 deletions

View File

@ -1010,6 +1010,9 @@ _e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSE
buffer = container_of(listener, E_Comp_Wl_Buffer, destroy_listener);
wl_signal_emit(&buffer->destroy_signal, buffer);
buffer->destroyed = EINA_TRUE;
if (!buffer->busy)
free(buffer);
}

View File

@ -63,6 +63,7 @@ struct _E_Comp_Wl_Buffer
E_Pixmap *discarding_pixmap;
int32_t w, h;
uint32_t busy;
Eina_Bool destroyed;
};
struct _E_Comp_Wl_Surface_State

View File

@ -144,6 +144,12 @@ _e_pixmap_wl_resource_release(E_Comp_Wl_Buffer *buffer)
buffer->pool = NULL;
}
if (buffer->destroyed)
{
free(buffer);
return;
}
wl_resource_queue_event(buffer->resource, WL_BUFFER_RELEASE);
}