libs: window: wayland: rt event queue at destroy()

The proxy object of wl_buffer for the last frame remains in the
wl_map. Even though we call wl_buffer_destroy() in
frame_release_callback(), the proxy object remains without being
removed, since proxy object is deleted when wayland server sees the
delete request and sends 'delete_id' event.

We need to call roundtrip before destroying event_queue so that the
proxy object is removed. Otherwise, it would be mess up as receiving
'delete_id' event from previous play, when playing in the next
va/wayland window with the same wl_display connection.

https://bugzilla.gnome.org/show_bug.cgi?id=773689

Signed-off-by: Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
This commit is contained in:
Jagyum Koo 2016-10-30 10:43:49 +09:00 committed by Víctor Manuel Jáquez Leal
parent 9c3a4edf05
commit 896a836f1d

View file

@ -313,10 +313,15 @@ gst_vaapi_window_wayland_destroy (GstVaapiWindow * window)
{
GstVaapiWindowWaylandPrivate *const priv =
GST_VAAPI_WINDOW_WAYLAND_GET_PRIVATE (window);
struct wl_display *const wl_display =
GST_VAAPI_OBJECT_NATIVE_DISPLAY (window);
/* Wait for the last frame to complete redraw */
gst_vaapi_window_wayland_sync (window);
if (priv->event_queue)
wl_display_roundtrip_queue (wl_display, priv->event_queue);
if (priv->last_frame) {
frame_state_free (priv->last_frame);
priv->last_frame = NULL;