Mesa (master): egl_dri2: Fix some valgrind reported leaks

Benjamin Franzke bnf at kemper.freedesktop.org
Tue Dec 13 14:35:13 UTC 2011


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

Author: Benjamin Franzke <benjaminfranzke at googlemail.com>
Date:   Tue Dec 13 14:43:48 2011 +0100

egl_dri2: Fix some valgrind reported leaks

Free the device_name, reported by Pekka Paalanen.

Destroy wayland display and drm resources,
if created by dri2_initialize_wayland.

---

 src/egl/drivers/dri2/egl_dri2.c         |    9 +++------
 src/egl/drivers/dri2/egl_dri2.h         |    2 +-
 src/egl/drivers/dri2/platform_drm.c     |    2 +-
 src/egl/drivers/dri2/platform_wayland.c |    5 +++++
 4 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 44c9bc1..4c9ece3 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -608,6 +608,8 @@ dri2_terminate(_EGLDriver *drv, _EGLDisplay *disp)
       close(dri2_dpy->fd);
    if (dri2_dpy->driver)
       dlclose(dri2_dpy->driver);
+   if (dri2_dpy->device_name)
+      free(dri2_dpy->device_name);
 
    if (disp->PlatformDisplay == NULL) {
       switch (disp->Platform) {
@@ -616,14 +618,9 @@ dri2_terminate(_EGLDriver *drv, _EGLDisplay *disp)
          xcb_disconnect(dri2_dpy->conn);
          break;
 #endif
-#ifdef HAVE_WAYLAND_PLATFORM
-      case _EGL_PLATFORM_WAYLAND:
-         wl_display_destroy(dri2_dpy->wl_dpy);
-         break;
-#endif
 #ifdef HAVE_DRM_PLATFORM
       case _EGL_PLATFORM_DRM:
-         if (dri2_dpy->own_gbm_device) {
+         if (dri2_dpy->own_device) {
             gbm_device_destroy(&dri2_dpy->gbm_dri->base.base);
          }
          break;
diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
index 95b87b8..193a866 100644
--- a/src/egl/drivers/dri2/egl_dri2.h
+++ b/src/egl/drivers/dri2/egl_dri2.h
@@ -101,9 +101,9 @@ struct dri2_egl_display
    __DRIimageExtension      *image;
    int                       fd;
 
+   int                       own_device;
 #ifdef HAVE_DRM_PLATFORM
    struct gbm_dri_device    *gbm_dri;
-   int                       own_gbm_device;
 #endif
 
    char                     *device_name;
diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
index e2c8dab..3dc2c40 100644
--- a/src/egl/drivers/dri2/platform_drm.c
+++ b/src/egl/drivers/dri2/platform_drm.c
@@ -108,7 +108,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
    gbm = disp->PlatformDisplay;
    if (gbm == NULL) {
       fd = open("/dev/dri/card0", O_RDWR);
-      dri2_dpy->own_gbm_device = 1;
+      dri2_dpy->own_device = 1;
       gbm = gbm_create_device(fd);
       if (gbm == NULL)
          return EGL_FALSE;
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index 7a70d8d..16c613f 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -731,6 +731,10 @@ dri2_terminate(_EGLDriver *drv, _EGLDisplay *disp)
    close(dri2_dpy->fd);
    dlclose(dri2_dpy->driver);
    free(dri2_dpy->driver_name);
+   free(dri2_dpy->device_name);
+   wl_drm_destroy(dri2_dpy->wl_drm);
+   if (dri2_dpy->own_device)
+      wl_display_destroy(dri2_dpy->wl_dpy);
    free(dri2_dpy);
    disp->DriverData = NULL;
 
@@ -819,6 +823,7 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
       dri2_dpy->wl_dpy = wl_display_connect(NULL);
       if (dri2_dpy->wl_dpy == NULL)
          goto cleanup_dpy;
+      dri2_dpy->own_device = 1;
    } else {
       dri2_dpy->wl_dpy = disp->PlatformDisplay;
    }




More information about the mesa-commit mailing list