aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRouven Czerwinski <rouven@czerwinskis.de>2019-08-02 19:11:23 +0200
committerSimon Ser <contact@emersion.fr>2019-08-03 15:44:21 +0200
commit4d36cc86eb8d056f963b3b783d6e3f9bf36e96b6 (patch)
treeb1bbeb440f2117f3c77649c3c0e4fb2da926d652
parent6396710976f351065307634b4869e768c4b453e9 (diff)
backend/drm: destroy output immediately
Instead of waiting for the next pageflip, destroy the output immediately since we can now handle flips for outputs which no longer exist. Also demote the missing crtc on flip to debug. Fixes #1739
-rw-r--r--backend/drm/drm.c15
-rw-r--r--include/backend/drm/drm.h2
2 files changed, 2 insertions, 15 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 730240c8..7b6cde24 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -1364,11 +1364,7 @@ void scan_drm_connectors(struct wlr_drm_backend *drm) {
wlr_log(WLR_INFO, "'%s' disappeared", conn->output.name);
drm_connector_cleanup(conn);
- if (conn->pageflip_pending) {
- conn->state = WLR_DRM_CONN_DISAPPEARED;
- } else {
- wlr_output_destroy(&conn->output);
- }
+ wlr_output_destroy(&conn->output);
}
realloc_crtcs(drm);
@@ -1402,17 +1398,12 @@ static void page_flip_handler(int fd, unsigned seq,
}
if (!conn) {
- wlr_log(WLR_ERROR, "No connector for crtc_id %u", crtc_id);
+ wlr_log(WLR_DEBUG, "No connector for crtc_id %u", crtc_id);
return;
}
conn->pageflip_pending = false;
- if (conn->state == WLR_DRM_CONN_DISAPPEARED) {
- wlr_output_destroy(&conn->output);
- return;
- }
-
if (conn->state != WLR_DRM_CONN_CONNECTED || conn->crtc == NULL) {
return;
}
@@ -1546,8 +1537,6 @@ static void drm_connector_cleanup(struct wlr_drm_connector *conn) {
break;
case WLR_DRM_CONN_DISCONNECTED:
break;
- case WLR_DRM_CONN_DISAPPEARED:
- return; // don't change state
}
conn->state = WLR_DRM_CONN_DISCONNECTED;
diff --git a/include/backend/drm/drm.h b/include/backend/drm/drm.h
index f007c9e0..fdee3fad 100644
--- a/include/backend/drm/drm.h
+++ b/include/backend/drm/drm.h
@@ -98,8 +98,6 @@ enum wlr_drm_connector_state {
WLR_DRM_CONN_NEEDS_MODESET,
WLR_DRM_CONN_CLEANUP,
WLR_DRM_CONN_CONNECTED,
- // Connector disappeared, waiting for being destroyed on next page-flip
- WLR_DRM_CONN_DISAPPEARED,
};
struct wlr_drm_mode {