mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-12-20 06:50:04 +01: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,
|
.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) {
|
void destroy_wl_buffer(struct wlr_wl_buffer *buffer) {
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
return;
|
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->buffer_destroy.link);
|
||||||
wl_list_remove(&buffer->link);
|
wl_list_remove(&buffer->link);
|
||||||
wl_buffer_destroy(buffer->wl_buffer);
|
wl_buffer_destroy(buffer->wl_buffer);
|
||||||
|
if (buffer->has_drm_syncobj_waiter) {
|
||||||
|
buffer_remove_drm_syncobj_waiter(buffer);
|
||||||
|
}
|
||||||
if (!buffer->released) {
|
if (!buffer->released) {
|
||||||
wlr_buffer_unlock(buffer->buffer);
|
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) {
|
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);
|
struct wlr_wl_buffer *buffer = wl_container_of(listener, buffer, drm_syncobj_ready);
|
||||||
|
buffer_remove_drm_syncobj_waiter(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;
|
|
||||||
|
|
||||||
buffer_release(buffer);
|
buffer_release(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue