Hi,

this is the 3rd version of my patches. This solves the problem of
leaked DRI driver configs by caching them in __GLXscreenConfigsRec.

The DRI code path is not run tested since I dont have such setup.

Please review!

Thanks,
Kristof
From 9c661235ae40ed1091b59bdc2aecfc1f4e04d3e3 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?RALOVICH,=20Krist=C3=B3f?= <[email protected]>
Date: Thu, 23 Jul 2009 17:03:54 +0200
Subject: [PATCH 1/5] glx: cache DRI configs in __GLXscreenConfigsRec

---
 src/glx/x11/glxclient.h |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h
index bf68d0f..2778ad8 100644
--- a/src/glx/x11/glxclient.h
+++ b/src/glx/x11/glxclient.h
@@ -501,6 +501,8 @@ struct __GLXscreenConfigsRec {
 
     __GLXDRIscreen *driScreen;
 
+    const __DRIconfig** driver_configs;
+
 #ifdef __DRI_COPY_SUB_BUFFER
     const __DRIcopySubBufferExtension *driCopySubBuffer;
 #endif
-- 
1.6.3.3

From a77720a14d13da01b4c9296357644aa04e1bb5b6 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?RALOVICH,=20Krist=C3=B3f?= <[email protected]>
Date: Thu, 23 Jul 2009 17:04:52 +0200
Subject: [PATCH 2/5] glx: properly release DRI configs

Release per screen DRI driver configs during screen destruction.
---
 src/glx/x11/glxext.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c
index b296b7c..3078662 100644
--- a/src/glx/x11/glxext.c
+++ b/src/glx/x11/glxext.c
@@ -149,6 +149,12 @@ FreeScreenConfigs(__GLXdisplayPrivate * priv)
       Xfree((char *) psc->serverGLXexts);
 
 #ifdef GLX_DIRECT_RENDERING
+      if (psc->driver_configs) {
+         for(unsigned int i = 0; psc->driver_configs[i]; i++)
+            free((__DRIconfig*)psc->driver_configs[i]);
+         free(psc->driver_configs);
+         psc->driver_configs = NULL;
+      }
       if (psc->driScreen) {
          psc->driScreen->destroyScreen(psc);
          __glxHashDestroy(psc->drawHash);
-- 
1.6.3.3

From 19aac4ec7781fadd5d70825124c88d50956d2024 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?RALOVICH,=20Krist=C3=B3f?= <[email protected]>
Date: Thu, 23 Jul 2009 17:05:43 +0200
Subject: [PATCH 3/5] glx: assign per screen driver configs (DRI2)

---
 src/glx/x11/dri2_glx.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/glx/x11/dri2_glx.c b/src/glx/x11/dri2_glx.c
index f4865ae..54add04 100644
--- a/src/glx/x11/dri2_glx.c
+++ b/src/glx/x11/dri2_glx.c
@@ -488,6 +488,8 @@ static __GLXDRIscreen *dri2CreateScreen(__GLXscreenConfigs *psc, int screen,
     psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs);
     psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs);
 
+    psc->driver_configs = driver_configs;
+
     psp->destroyScreen = dri2DestroyScreen;
     psp->createContext = dri2CreateContext;
     psp->createDrawable = dri2CreateDrawable;
-- 
1.6.3.3

From d082a18c4b270a7fff4693ee5b5f89a04e097df5 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?RALOVICH,=20Krist=C3=B3f?= <[email protected]>
Date: Thu, 23 Jul 2009 17:05:50 +0200
Subject: [PATCH 4/5] glx: assign per screen driver configs (DRI)

---
 src/glx/x11/dri_glx.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/glx/x11/dri_glx.c b/src/glx/x11/dri_glx.c
index ac2eb05..d24471c 100644
--- a/src/glx/x11/dri_glx.c
+++ b/src/glx/x11/dri_glx.c
@@ -418,6 +418,8 @@ CallCreateNewScreen(Display *dpy, int scrn, __GLXscreenConfigs *psc,
     psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs);
     psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs);
 
+    psc->driver_configs = driver_configs;
+
     /* Visuals with depth != screen depth are subject to automatic compositing
      * in the X server, so DRI1 can't render to them properly. Mark them as
      * non-conformant to prevent apps from picking them up accidentally.
-- 
1.6.3.3

From 5ec09414218f3ba68fea56ca679e08f544cbac89 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?RALOVICH,=20Krist=C3=B3f?= <[email protected]>
Date: Thu, 23 Jul 2009 17:05:59 +0200
Subject: [PATCH 5/5] glx: assign per screen driver configs (DRISW)

---
 src/glx/x11/drisw_glx.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glx/x11/drisw_glx.c b/src/glx/x11/drisw_glx.c
index 1c229dd..15e1586 100644
--- a/src/glx/x11/drisw_glx.c
+++ b/src/glx/x11/drisw_glx.c
@@ -401,7 +401,7 @@ driCreateScreen(__GLXscreenConfigs * psc, int screen,
    psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs);
    psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs);
 
-   free(driver_configs);
+   psc->driver_configs = driver_configs;
 
    psp->destroyScreen = driDestroyScreen;
    psp->createContext = driCreateContext;
-- 
1.6.3.3

------------------------------------------------------------------------------
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to