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
