diff options
| -rw-r--r-- | backend/drm/drm.c | 12 | 
1 files changed, 10 insertions, 2 deletions
| diff --git a/backend/drm/drm.c b/backend/drm/drm.c index ce1aca09..a869e935 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -1215,15 +1215,23 @@ static drmModeModeInfo *connector_get_current_mode(struct wlr_drm_connector *wlr  		return mode;  	} else {  		// Fallback to the legacy API -		if (!wlr_conn->crtc->legacy_crtc->mode_valid) { +		drmModeCrtc *drm_crtc = drmModeGetCrtc(drm->fd, wlr_conn->crtc->id); +		if (drm_crtc == NULL) { +			wlr_log_errno(WLR_ERROR, "drmModeGetCrtc failed"); +			return NULL; +		} +		if (!drm_crtc->mode_valid) { +			drmModeFreeCrtc(drm_crtc);  			return NULL;  		}  		drmModeModeInfo *mode = malloc(sizeof(*mode));  		if (mode == NULL) {  			wlr_log_errno(WLR_ERROR, "Allocation failed"); +			drmModeFreeCrtc(drm_crtc);  			return NULL;  		} -		*mode = wlr_conn->crtc->legacy_crtc->mode; +		*mode = drm_crtc->mode; +		drmModeFreeCrtc(drm_crtc);  		return mode;  	}  } | 
