mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
backend/wayland: remove syncobj waiter on buffer destroy
This commit is contained in:
parent
980ac9e4c8
commit
4f6dd01e5a
1 changed files with 10 additions and 5 deletions
|
|
@ -134,6 +134,12 @@ static const struct wp_presentation_feedback_listener
|
|||
.discarded = presentation_feedback_handle_discarded,
|
||||
};
|
||||
|
||||
static void buffer_remove_drm_syncobj_waiter(struct wlr_wl_buffer *buffer) {
|
||||
wl_list_remove(&buffer->drm_syncobj_ready.link);
|
||||
wlr_drm_syncobj_timeline_waiter_finish(&buffer->drm_syncobj_waiter);
|
||||
buffer->has_drm_syncobj_waiter = false;
|
||||
}
|
||||
|
||||
void destroy_wl_buffer(struct wlr_wl_buffer *buffer) {
|
||||
if (buffer == NULL) {
|
||||
return;
|
||||
|
|
@ -141,6 +147,9 @@ void destroy_wl_buffer(struct wlr_wl_buffer *buffer) {
|
|||
wl_list_remove(&buffer->buffer_destroy.link);
|
||||
wl_list_remove(&buffer->link);
|
||||
wl_buffer_destroy(buffer->wl_buffer);
|
||||
if (buffer->has_drm_syncobj_waiter) {
|
||||
buffer_remove_drm_syncobj_waiter(buffer);
|
||||
}
|
||||
if (!buffer->released) {
|
||||
wlr_buffer_unlock(buffer->buffer);
|
||||
}
|
||||
|
|
@ -170,11 +179,7 @@ static const struct wl_buffer_listener buffer_listener = {
|
|||
|
||||
static void buffer_handle_drm_syncobj_ready(struct wl_listener *listener, void *data) {
|
||||
struct wlr_wl_buffer *buffer = wl_container_of(listener, buffer, drm_syncobj_ready);
|
||||
|
||||
wl_list_remove(&buffer->drm_syncobj_ready.link);
|
||||
wlr_drm_syncobj_timeline_waiter_finish(&buffer->drm_syncobj_waiter);
|
||||
buffer->has_drm_syncobj_waiter = false;
|
||||
|
||||
buffer_remove_drm_syncobj_waiter(buffer);
|
||||
buffer_release(buffer);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue