Mesa (master): winsys/sw: Fix error paths

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Sun Apr 11 23:51:56 UTC 2010


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

Author: Jakob Bornecrantz <wallbraker at gmail.com>
Date:   Sat Apr 10 13:41:22 2010 +0200

winsys/sw: Fix error paths

---

 src/gallium/winsys/sw/drm/sw_drm_api.c            |    9 ++++++++-
 src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c |    8 ++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/gallium/winsys/sw/drm/sw_drm_api.c b/src/gallium/winsys/sw/drm/sw_drm_api.c
index eb81d26..2ccde61 100644
--- a/src/gallium/winsys/sw/drm/sw_drm_api.c
+++ b/src/gallium/winsys/sw/drm/sw_drm_api.c
@@ -65,8 +65,12 @@ sw_drm_create_screen(struct drm_api *_api, int drmFD,
    struct pipe_screen *screen;
 
    screen = api->create_screen(api, drmFD, arg);
+   if (!screen)
+      return NULL;
 
    sww = wrapper_sw_winsys_warp_pipe_screen(screen);
+   if (!sww)
+      return NULL;
 
    return softpipe_create_screen(sww);
 }
@@ -86,7 +90,10 @@ sw_drm_api_create(struct drm_api *api)
 {
    struct sw_drm_api *swapi = CALLOC_STRUCT(sw_drm_api);
 
-   swapi->base.name = "sw";
+   if (!swapi)
+      return api;
+
+   swapi->base.name = api->name;
    swapi->base.driver_name = api->driver_name;
    swapi->base.create_screen = sw_drm_create_screen;
    swapi->base.destroy = sw_drm_destroy;
diff --git a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
index 9a68d9f..d4d4270 100644
--- a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
+++ b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
@@ -262,6 +262,9 @@ wrapper_sw_winsys_warp_pipe_screen(struct pipe_screen *screen)
 {
    struct wrapper_sw_winsys *wsw = CALLOC_STRUCT(wrapper_sw_winsys);
 
+   if (!wsw)
+      goto err;
+
    wsw->base.displaytarget_create = wsw_dt_create;
    wsw->base.displaytarget_from_handle = wsw_dt_from_handle;
    wsw->base.displaytarget_map = wsw_dt_map;
@@ -272,11 +275,12 @@ wrapper_sw_winsys_warp_pipe_screen(struct pipe_screen *screen)
    wsw->screen = screen;
    wsw->pipe = screen->context_create(screen, NULL);
    if (!wsw->pipe)
-      goto err;
+      goto err_free;
 
    return &wsw->base;
 
-err:
+err_free:
    FREE(wsw);
+err:
    return NULL;
 }




More information about the mesa-commit mailing list