[cogl/halfline/wip/render-node: 3/6] kms-winsys: clean up error handling in _cogl_winsys_renderer_connect



commit 07aa682054373478404077d4c035b702b272a222
Author: Ray Strode <rstrode redhat com>
Date:   Wed Aug 26 11:13:25 2015 -0400

    kms-winsys: clean up error handling in _cogl_winsys_renderer_connect
    
    If cogl fails to open the drm device, initialize gbm, or open the
    egl display, then it closes the drm fd, uninitializes gbm, closes the
    display and then calls _cogl_winsys_renderer_disconnect which does
    most of those things again, on the, now deinitialized, members.
    
    This commit removes the explicit failure handling in renderer_connect and
    defers cleanup to disconnect.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=753531

 cogl/winsys/cogl-winsys-egl-kms.c |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)
---
diff --git a/cogl/winsys/cogl-winsys-egl-kms.c b/cogl/winsys/cogl-winsys-egl-kms.c
index 70ea9a8..ada3c97 100644
--- a/cogl/winsys/cogl-winsys-egl-kms.c
+++ b/cogl/winsys/cogl-winsys-egl-kms.c
@@ -124,7 +124,11 @@ _cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
   CoglRendererEGL *egl_renderer = renderer->winsys;
   CoglRendererKMS *kms_renderer = egl_renderer->platform;
 
-  eglTerminate (egl_renderer->edpy);
+  if (egl_renderer->edpy != EGL_NO_DISPLAY)
+    eglTerminate (egl_renderer->edpy);
+
+  if (kms_renderer->gbm != NULL)
+    gbm_device_destroy (kms_renderer->gbm);
 
   if (kms_renderer->opened_fd >= 0)
     close (kms_renderer->opened_fd);
@@ -308,6 +312,8 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
   kms_renderer->fd = -1;
   kms_renderer->opened_fd = -1;
 
+  egl_renderer->edpy = EGL_NO_DISPLAY;
+
   if (renderer->kms_fd >= 0)
     {
       kms_renderer->fd = renderer->kms_fd;
@@ -332,7 +338,7 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
       _cogl_set_error (error, COGL_WINSYS_ERROR,
                    COGL_WINSYS_ERROR_INIT,
                    "Couldn't create gbm device");
-      goto close_fd;
+      goto fail;
     }
 
   egl_renderer->edpy = eglGetDisplay ((EGLNativeDisplayType)kms_renderer->gbm);
@@ -341,11 +347,11 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
       _cogl_set_error (error, COGL_WINSYS_ERROR,
                    COGL_WINSYS_ERROR_INIT,
                    "Couldn't get eglDisplay");
-      goto destroy_gbm_device;
+      goto fail;
     }
 
   if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
-    goto egl_terminate;
+    goto fail;
 
   _cogl_poll_renderer_add_fd (renderer,
                               kms_renderer->fd,
@@ -356,14 +362,7 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
 
   return TRUE;
 
-egl_terminate:
-  eglTerminate (egl_renderer->edpy);
-destroy_gbm_device:
-  gbm_device_destroy (kms_renderer->gbm);
-close_fd:
-  if (kms_renderer->opened_fd >= 0)
-    close (kms_renderer->opened_fd);
-
+fail:
   _cogl_winsys_renderer_disconnect (renderer);
 
   return FALSE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]