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