Mesa (master): vl/winsys_dri: cleanup vl_screen_create error path

Emil Velikov evelikov at kemper.freedesktop.org
Sat Feb 22 03:24:59 UTC 2014


Module: Mesa
Branch: master
Commit: 636ac989b2ef4ada8239a49521cf37be2fa81c0c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=636ac989b2ef4ada8239a49521cf37be2fa81c0c

Author: Emil Velikov <emil.l.velikov at gmail.com>
Date:   Mon Feb 10 18:29:43 2014 +0000

vl/winsys_dri: cleanup vl_screen_create error path

Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
Reviewed-by: Jakob Bornecrantz <jakob at vmware.com>
Reviewed-by: Christian König <christian.koenig at amd.com>

---

 src/gallium/auxiliary/vl/vl_winsys_dri.c |   32 ++++++++++++++++++------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri.c b/src/gallium/auxiliary/vl/vl_winsys_dri.c
index fb4aaad..5d83e57 100644
--- a/src/gallium/auxiliary/vl/vl_winsys_dri.c
+++ b/src/gallium/auxiliary/vl/vl_winsys_dri.c
@@ -330,7 +330,7 @@ vl_screen_create(Display *display, int screen)
    dri2_query_cookie = xcb_dri2_query_version (scrn->conn, XCB_DRI2_MAJOR_VERSION, XCB_DRI2_MINOR_VERSION);
    dri2_query = xcb_dri2_query_version_reply (scrn->conn, dri2_query_cookie, &error);
    if (dri2_query == NULL || error != NULL || dri2_query->minor_version < 2)
-      goto free_screen;
+      goto free_query;
 
    s = xcb_setup_roots_iterator(xcb_get_setup(scrn->conn));
    while (screen--)
@@ -353,48 +353,54 @@ vl_screen_create(Display *display, int screen)
    connect_cookie = xcb_dri2_connect_unchecked(scrn->conn, s.data->root, driverType);
    connect = xcb_dri2_connect_reply(scrn->conn, connect_cookie, NULL);
    if (connect == NULL || connect->driver_name_length + connect->device_name_length == 0)
-      goto free_screen;
+      goto free_connect;
 
    device_name_length = xcb_dri2_connect_device_name_length(connect);
    device_name = CALLOC(1, device_name_length + 1);
+   if (!device_name)
+      goto free_connect;
    memcpy(device_name, xcb_dri2_connect_device_name(connect), device_name_length);
    fd = open(device_name, O_RDWR);
    free(device_name);
 
    if (fd < 0)
-      goto free_screen;
+      goto free_connect;
 
    if (drmGetMagic(fd, &magic))
-      goto free_screen;
+      goto free_connect;
 
    authenticate_cookie = xcb_dri2_authenticate_unchecked(scrn->conn, s.data->root, magic);
    authenticate = xcb_dri2_authenticate_reply(scrn->conn, authenticate_cookie, NULL);
 
    if (authenticate == NULL || !authenticate->authenticated)
-      goto free_screen;
+      goto free_authenticate;
 
    scrn->base.pscreen = driver_descriptor.create_screen(fd);
+
    if (!scrn->base.pscreen)
-      goto free_screen;
+      goto free_authenticate;
 
    scrn->base.pscreen->flush_frontbuffer = vl_dri2_flush_frontbuffer;
    vl_compositor_reset_dirty_area(&scrn->dirty_areas[0]);
    vl_compositor_reset_dirty_area(&scrn->dirty_areas[1]);
 
-   free(dri2_query);
-   free(connect);
    free(authenticate);
+   free(connect);
+   free(dri2_query);
+   free(error);
 
    return &scrn->base;
 
-free_screen:
-   FREE(scrn);
-
-   free(dri2_query);
-   free(connect);
+free_authenticate:
    free(authenticate);
+free_connect:
+   free(connect);
+free_query:
+   free(dri2_query);
    free(error);
 
+free_screen:
+   FREE(scrn);
    return NULL;
 }
 




More information about the mesa-commit mailing list