ref = container_of(listener, E_Comp_Wl_Buffer_Ref, destroy_listener);
if ((E_Comp_Wl_Buffer *)data != ref->buffer) return;
ref->buffer = NULL;
+ ref->destroy_listener_usable = EINA_FALSE;
}
static void
wl_buffer_send_release(ref->buffer->resource);
}
}
- wl_list_remove(&ref->destroy_listener.link);
+
+ if (ref->destroy_listener_usable)
+ {
+ wl_list_remove(&ref->destroy_listener.link);
+ ref->destroy_listener_usable = EINA_FALSE;
+ }
}
if ((buffer) && (buffer != ref->buffer))
{
buffer->busy++;
wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener);
+ ref->destroy_listener_usable = EINA_TRUE;
}
ref->buffer = buffer;
{
E_Comp_Wl_Buffer *buffer;
struct wl_listener destroy_listener;
+ Eina_Bool destroy_listener_usable;
};
struct _E_Comp_Wl_Buffer_Viewport {