Mesa (master): egl: Fix Terminate with shared gbm screens

Benjamin Franzke bnf at kemper.freedesktop.org
Mon Jun 27 08:56:31 UTC 2011


Module: Mesa
Branch: master
Commit: 992680c8b46d72cbc61888b8439d815bff42986c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=992680c8b46d72cbc61888b8439d815bff42986c

Author: Benjamin Franzke <benjaminfranzke at googlemail.com>
Date:   Mon Jun 27 10:23:34 2011 +0200

egl: Fix Terminate with shared gbm screens

NOTE: This is a candidate for the 7.11 branch.

---

 src/egl/drivers/dri2/egl_dri2.c                 |    8 ++++++--
 src/egl/drivers/dri2/egl_dri2.h                 |    1 +
 src/gallium/state_trackers/egl/drm/native_drm.c |    2 ++
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index f9a5eb1..5680c36 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -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) {
diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
index cd52d42..83ea21e 100644
--- a/src/egl/drivers/dri2/egl_dri2.h
+++ b/src/egl/drivers/dri2/egl_dri2.h
@@ -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;
diff --git a/src/gallium/state_trackers/egl/drm/native_drm.c b/src/gallium/state_trackers/egl/drm/native_drm.c
index de4eb85..47910de 100644
--- a/src/gallium/state_trackers/egl/drm/native_drm.c
+++ b/src/gallium/state_trackers/egl/drm/native_drm.c
@@ -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)




More information about the mesa-commit mailing list