summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2012-01-23 15:39:10 +0000
committerRobert Bragg <robert@linux.intel.com>2012-02-08 17:00:25 +0000
commit0f33c942f2f1599866416dcc9215cd9f8dc3f35d (patch)
tree41af3e41c3b0b793aeb3864135d8d772f9243bec
parent1a638b6fd6060cac4bc6f165d4544d76ea28e09f (diff)
downloadcogl-0f33c942f2f1599866416dcc9215cd9f8dc3f35d.tar.gz
kms: gracefully handle NULL save_state at cleanup
If we failed to save any crtc state then we skip trying to restore the old state at cleanup. Reviewed-by: Neil Roberts <neil@linux.intel.com>
-rw-r--r--cogl/winsys/cogl-winsys-egl-kms.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/cogl/winsys/cogl-winsys-egl-kms.c b/cogl/winsys/cogl-winsys-egl-kms.c
index b39c45dd..7864bd24 100644
--- a/cogl/winsys/cogl-winsys-egl-kms.c
+++ b/cogl/winsys/cogl-winsys-egl-kms.c
@@ -297,19 +297,22 @@ _cogl_winsys_egl_cleanup_context (CoglDisplay *display)
CoglRenderer *renderer = display->renderer;
CoglRendererEGL *egl_renderer = renderer->winsys;
CoglRendererKMS *kms_renderer = egl_renderer->platform;
- int ret;
/* Restore the saved CRTC - this failing should not propagate an error */
- ret = drmModeSetCrtc (kms_renderer->fd,
- kms_display->saved_crtc->crtc_id,
- kms_display->saved_crtc->buffer_id,
- kms_display->saved_crtc->x, kms_display->saved_crtc->y,
- &kms_display->connector->connector_id, 1,
- &kms_display->saved_crtc->mode);
- if (ret)
- g_critical (G_STRLOC ": Error restoring saved CRTC");
-
- drmModeFreeCrtc (kms_display->saved_crtc);
+ if (kms_display->saved_crtc)
+ {
+ int ret = drmModeSetCrtc (kms_renderer->fd,
+ kms_display->saved_crtc->crtc_id,
+ kms_display->saved_crtc->buffer_id,
+ kms_display->saved_crtc->x,
+ kms_display->saved_crtc->y,
+ &kms_display->connector->connector_id, 1,
+ &kms_display->saved_crtc->mode);
+ if (ret)
+ g_critical (G_STRLOC ": Error restoring saved CRTC");
+
+ drmModeFreeCrtc (kms_display->saved_crtc);
+ }
}
static void