diff options
Diffstat (limited to 'backend/drm/drm.c')
-rw-r--r-- | backend/drm/drm.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c index 64db81f5..40506cd4 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -1425,6 +1425,36 @@ void scan_drm_connectors(struct wlr_drm_backend *drm, } } +void scan_drm_leases(struct wlr_drm_backend *drm) { + drmModeLesseeListRes *list = drmModeListLessees(drm->fd); + if (list == NULL) { + wlr_log_errno(WLR_ERROR, "drmModeListLessees failed"); + return; + } + + struct wlr_drm_connector *conn; + wl_list_for_each(conn, &drm->outputs, link) { + if (conn->lease == NULL) { + continue; + } + + bool found = false; + for (size_t i = 0; i < list->count; i++) { + if (list->lessees[i] == conn->lease->lessee_id) { + found = true; + break; + } + } + if (!found) { + wlr_log(WLR_DEBUG, "DRM lease %"PRIu32" has been terminated", + conn->lease->lessee_id); + drm_lease_destroy(conn->lease); + } + } + + drmFree(list); +} + static int mhz_to_nsec(int mhz) { return 1000000000000LL / mhz; } |