winsys/sw: Fix error paths

This commit is contained in:
Jakob Bornecrantz 2010-04-10 13:41:22 +02:00
parent c81f049794
commit cefe2a1dc2
2 changed files with 14 additions and 3 deletions

View File

@ -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;

View File

@ -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;
}