[Mesa-dev] [PATCH 02/10] vl/winsys_dri: cleanup vl_screen_create error path

Christian König deathsimple at vodafone.de
Thu Feb 13 08:27:37 PST 2014


Am 13.02.2014 17:18, schrieb Emil Velikov:
> 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-dev mailing list