egl: Fix Terminate with shared gbm screens
NOTE: This is a candidate for the 7.11 branch.
This commit is contained in:
@@ -506,6 +506,8 @@ dri2_create_screen(_EGLDisplay *disp)
|
||||
return EGL_FALSE;
|
||||
}
|
||||
|
||||
dri2_dpy->own_dri_screen = 1;
|
||||
|
||||
extensions = dri2_dpy->core->getExtensions(dri2_dpy->dri_screen);
|
||||
|
||||
if (dri2_dpy->dri2) {
|
||||
@@ -576,10 +578,12 @@ dri2_terminate(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
_eglReleaseDisplayResources(drv, disp);
|
||||
_eglCleanupDisplay(disp);
|
||||
|
||||
dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen);
|
||||
if (dri2_dpy->own_dri_screen)
|
||||
dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen);
|
||||
if (dri2_dpy->fd)
|
||||
close(dri2_dpy->fd);
|
||||
dlclose(dri2_dpy->driver);
|
||||
if (dri2_dpy->driver)
|
||||
dlclose(dri2_dpy->driver);
|
||||
|
||||
if (disp->PlatformDisplay == NULL) {
|
||||
switch (disp->Platform) {
|
||||
|
||||
@@ -71,6 +71,7 @@ struct dri2_egl_display
|
||||
int dri2_major;
|
||||
int dri2_minor;
|
||||
__DRIscreen *dri_screen;
|
||||
int own_dri_screen;
|
||||
const __DRIconfig **driver_configs;
|
||||
void *driver;
|
||||
__DRIcoreExtension *core;
|
||||
|
||||
@@ -127,6 +127,8 @@ drm_display_destroy(struct native_display *ndpy)
|
||||
|
||||
drm_display_fini_modeset(&drmdpy->base);
|
||||
|
||||
/* gbm owns screen */
|
||||
ndpy->screen = NULL;
|
||||
ndpy_uninit(ndpy);
|
||||
|
||||
if (drmdpy->device_name)
|
||||
|
||||
Reference in New Issue
Block a user