diff options
author | Rouven Czerwinski <rouven@czerwinskis.de> | 2019-08-02 19:11:23 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-08-03 15:44:21 +0200 |
commit | 4d36cc86eb8d056f963b3b783d6e3f9bf36e96b6 (patch) | |
tree | b1bbeb440f2117f3c77649c3c0e4fb2da926d652 /backend/drm | |
parent | 6396710976f351065307634b4869e768c4b453e9 (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
Diffstat (limited to 'backend/drm')
-rw-r--r-- | backend/drm/drm.c | 15 |
1 files changed, 2 insertions, 13 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; |