virgl: improve init error handling

When we run into an error in virgl_renderer_init, simply call
virgl_renderer_cleanup.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
macos/master
Chia-I Wu 4 years ago
parent 8dc7d34de9
commit bd6540c6ba
  1. 17
      src/virglrenderer.c

@ -480,14 +480,14 @@ int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks
if (!state.resource_initialized) { if (!state.resource_initialized) {
ret = virgl_resource_table_init(vrend_renderer_get_pipe_callbacks()); ret = virgl_resource_table_init(vrend_renderer_get_pipe_callbacks());
if (ret) if (ret)
return ret; goto fail;
state.resource_initialized = true; state.resource_initialized = true;
} }
if (!state.context_initialized) { if (!state.context_initialized) {
ret = virgl_context_table_init(); ret = virgl_context_table_init();
if (ret) if (ret)
return ret; goto fail;
state.context_initialized = true; state.context_initialized = true;
} }
@ -501,8 +501,11 @@ int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks
} }
ret = vrend_winsys_init(flags, drm_fd); ret = vrend_winsys_init(flags, drm_fd);
if (ret) if (ret) {
return ret; if (drm_fd >= 0)
close(drm_fd);
goto fail;
}
state.winsys_initialized = true; state.winsys_initialized = true;
} }
@ -516,11 +519,15 @@ int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks
ret = vrend_renderer_init(&vrend_cbs, renderer_flags); ret = vrend_renderer_init(&vrend_cbs, renderer_flags);
if (ret) if (ret)
return ret; goto fail;
state.vrend_initialized = true; state.vrend_initialized = true;
} }
return 0; return 0;
fail:
virgl_renderer_cleanup(NULL);
return ret;
} }
int virgl_renderer_get_fd_for_texture(uint32_t tex_id, int *fd) int virgl_renderer_get_fd_for_texture(uint32_t tex_id, int *fd)

Loading…
Cancel
Save