From 044a9f28d681408d805a8bcc02ec47050cb1eb85 Mon Sep 17 00:00:00 2001 From: Will Daly Date: Fri, 1 May 2020 06:15:40 -0700 Subject: [PATCH] Fix error when reconnecting external display Reconnecting an external display fails on initial page-flip. This occurs when the pageflip_pending flag has been set on the connector at the time the monitor is removed. Once the connector's CRTC has been deallocated, page_flip_handler cannot find the connector by its crtc_id, so pageflip_pending will remain set. This causes initialization to fail when the monitor is reconnected with the error messages: Skipping pageflip on output 'X' Failed to initialize renderer on connector 'X': initial page-flip failed To fix this problem, clear the pageflip_pending flag when cleaning up the connector. --- backend/drm/drm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/drm/drm.c b/backend/drm/drm.c index 89d89c03..b320ffb4 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -1677,6 +1677,7 @@ static void drm_connector_cleanup(struct wlr_drm_connector *conn) { dealloc_crtc(conn); conn->possible_crtc = 0; conn->desired_mode = NULL; + conn->pageflip_pending = false; wlr_signal_emit_safe(&conn->output.events.destroy, &conn->output); break; case WLR_DRM_CONN_DISCONNECTED: