aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/drm.c
diff options
context:
space:
mode:
authorAlexander Orzechowski <alex@ozal.ski>2023-11-17 13:49:18 -0500
committerAlexander Orzechowski <alex@ozal.ski>2023-11-17 13:49:18 -0500
commit3aed24b8d4572eb4cd2488113f1c1a23ceb290d8 (patch)
tree6165c9c9fb31c8c395392e29a6361686483def7d /backend/drm/drm.c
parent3b53d1cbf199aa5db0b1c81df92e43fc05670543 (diff)
backend/drm: Track page flips in list
Diffstat (limited to 'backend/drm/drm.c')
-rw-r--r--backend/drm/drm.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 92feed6c..eb9e8267 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -420,6 +420,15 @@ static void drm_connector_set_pending_page_flip(struct wlr_drm_connector *conn,
conn->pending_page_flip = page_flip;
}
+static void page_flip_destroy(struct wlr_drm_page_flip *page_flip) {
+ if (!page_flip) {
+ return;
+ }
+
+ wl_list_remove(&page_flip->link);
+ free(page_flip);
+}
+
static bool drm_crtc_commit(struct wlr_drm_connector *conn,
const struct wlr_drm_connector_state *state,
uint32_t flags, bool test_only) {
@@ -433,6 +442,7 @@ static bool drm_crtc_commit(struct wlr_drm_connector *conn,
return false;
}
page_flip->conn = conn;
+ wl_list_insert(&conn->backend->page_flips, &page_flip->link);
}
struct wlr_drm_backend *drm = conn->backend;
@@ -466,7 +476,7 @@ static bool drm_crtc_commit(struct wlr_drm_connector *conn,
drm_fb_clear(&layer->pending_fb);
}
- free(page_flip);
+ page_flip_destroy(page_flip);
}
return ok;
}
@@ -1686,7 +1696,7 @@ static void handle_page_flip(int fd, unsigned seq,
if (conn != NULL) {
conn->pending_page_flip = NULL;
}
- free(page_flip);
+ page_flip_destroy(page_flip);
if (conn == NULL) {
return;