if (!dri2_dpy)
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
+ dri2_dpy->fd = -1;
if (!dri2_get_xcb_connection(drv, disp, dri2_dpy))
- goto cleanup_dpy;
+ goto cleanup;
/*
* Every hardware driver_name is set using strdup. Doing the same in
* here will allow is to simply free the memory at dri2_terminate().
*/
- dri2_dpy->fd = -1;
dri2_dpy->driver_name = strdup("swrast");
if (!dri2_load_driver_swrast(disp))
- goto cleanup_conn;
+ goto cleanup;
dri2_dpy->loader_extensions = swrast_loader_extensions;
if (!dri2_create_screen(disp))
- goto cleanup_driver;
+ goto cleanup;
if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, true))
- goto cleanup_configs;
+ goto cleanup;
/* Fill vtbl last to prevent accidentally calling virtual function during
* initialization.
return EGL_TRUE;
- cleanup_configs:
- _eglCleanupDisplay(disp);
- dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen);
- cleanup_driver:
- dlclose(dri2_dpy->driver);
- cleanup_conn:
- free(dri2_dpy->driver_name);
- if (disp->PlatformDisplay == NULL)
- xcb_disconnect(dri2_dpy->conn);
- cleanup_dpy:
- free(dri2_dpy);
- disp->DriverData = NULL;
-
+ cleanup:
+ dri2_display_destroy(disp);
return EGL_FALSE;
}
if (!dri2_dpy)
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
+ dri2_dpy->fd = -1;
if (!dri2_get_xcb_connection(drv, disp, dri2_dpy))
- goto cleanup_dpy;
+ goto cleanup;
if (!dri3_x11_connect(dri2_dpy))
- goto cleanup_conn;
+ goto cleanup;
if (!dri2_load_driver_dri3(disp))
- goto cleanup_conn;
+ goto cleanup;
dri2_dpy->loader_extensions = dri3_image_loader_extensions;
dri2_dpy->invalidate_available = true;
if (!dri2_create_screen(disp))
- goto cleanup_fd;
+ goto cleanup;
dri2_x11_setup_swap_interval(dri2_dpy);
dri2_set_WL_bind_wayland_display(drv, disp);
if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, false))
- goto cleanup_configs;
+ goto cleanup;
dri2_dpy->loader_dri3_ext.core = dri2_dpy->core;
dri2_dpy->loader_dri3_ext.image_driver = dri2_dpy->image_driver;
return EGL_TRUE;
- cleanup_configs:
- _eglCleanupDisplay(disp);
- dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen);
- dlclose(dri2_dpy->driver);
- cleanup_fd:
- close(dri2_dpy->fd);
- cleanup_conn:
- if (disp->PlatformDisplay == NULL)
- xcb_disconnect(dri2_dpy->conn);
- cleanup_dpy:
- free(dri2_dpy);
- disp->DriverData = NULL;
-
+ cleanup:
+ dri2_display_destroy(disp);
return EGL_FALSE;
}
#endif
if (!dri2_dpy)
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
+ dri2_dpy->fd = -1;
if (!dri2_get_xcb_connection(drv, disp, dri2_dpy))
- goto cleanup_dpy;
+ goto cleanup;
if (!dri2_x11_connect(dri2_dpy))
- goto cleanup_conn;
+ goto cleanup;
if (!dri2_load_driver(disp))
- goto cleanup_fd;
+ goto cleanup;
if (dri2_dpy->dri2_minor >= 1)
dri2_dpy->loader_extensions = dri2_loader_extensions;
dri2_dpy->invalidate_available = (dri2_dpy->dri2_minor >= 3);
if (!dri2_create_screen(disp))
- goto cleanup_driver;
+ goto cleanup;
dri2_x11_setup_swap_interval(dri2_dpy);
dri2_set_WL_bind_wayland_display(drv, disp);
if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, true))
- goto cleanup_configs;
+ goto cleanup;
/* Fill vtbl last to prevent accidentally calling virtual function during
* initialization.
return EGL_TRUE;
- cleanup_configs:
- _eglCleanupDisplay(disp);
- dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen);
- cleanup_driver:
- dlclose(dri2_dpy->driver);
- cleanup_fd:
- close(dri2_dpy->fd);
- cleanup_conn:
- if (disp->PlatformDisplay == NULL)
- xcb_disconnect(dri2_dpy->conn);
- cleanup_dpy:
- free(dri2_dpy);
- disp->DriverData = NULL;
-
+ cleanup:
+ dri2_display_destroy(disp);
return EGL_FALSE;
}