diff options
author | Emil Velikov <[email protected]> | 2014-02-10 18:29:43 +0000 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2014-02-22 03:26:27 +0000 |
commit | 636ac989b2ef4ada8239a49521cf37be2fa81c0c (patch) | |
tree | e12c8b061e1d4aae9d417b7d819f9533fb056572 | |
parent | 0c9912b266dc62aa75d325911c5e20359dfdf826 (diff) |
vl/winsys_dri: cleanup vl_screen_create error path
Signed-off-by: Emil Velikov <[email protected]>
Reviewed-by: Jakob Bornecrantz <[email protected]>
Reviewed-by: Christian König <[email protected]>
-rw-r--r-- | src/gallium/auxiliary/vl/vl_winsys_dri.c | 32 |
1 files 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 fb4aaadd48a..5d83e5799da 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; } |