diff options
author | Henri Verbeet <[email protected]> | 2011-01-29 15:00:48 -0800 |
---|---|---|
committer | Brian Paul <[email protected]> | 2011-01-31 09:29:54 -0700 |
commit | bfc889517ad0d490cce1817eecac146d66bcd923 (patch) | |
tree | 584a723e55c950eedb8fa2d7f0195bd475ae7ffe /src/glx/glxext.c | |
parent | cbe9fc12a64c3ae89fd1b20e9e165aa4b76293a5 (diff) |
glx: Fix leaks in DRI2 screen creation error paths.
Signed-off-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/glx/glxext.c')
-rw-r--r-- | src/glx/glxext.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/glx/glxext.c b/src/glx/glxext.c index c75c9bfd329..25d266e18e1 100644 --- a/src/glx/glxext.c +++ b/src/glx/glxext.c @@ -194,17 +194,7 @@ FreeScreenConfigs(struct glx_display * priv) screens = ScreenCount(priv->dpy); for (i = 0; i < screens; i++) { psc = priv->screens[i]; - if (psc->configs) { - glx_config_destroy_list(psc->configs); - if (psc->effectiveGLXexts) - Xfree(psc->effectiveGLXexts); - psc->configs = NULL; /* NOTE: just for paranoia */ - } - if (psc->visuals) { - glx_config_destroy_list(psc->visuals); - psc->visuals = NULL; /* NOTE: just for paranoia */ - } - Xfree((char *) psc->serverGLXexts); + glx_screen_cleanup(psc); #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) if (psc->driScreen) { @@ -728,6 +718,22 @@ glx_screen_init(struct glx_screen *psc, return GL_TRUE; } +_X_HIDDEN void +glx_screen_cleanup(struct glx_screen *psc) +{ + if (psc->configs) { + glx_config_destroy_list(psc->configs); + if (psc->effectiveGLXexts) + Xfree(psc->effectiveGLXexts); + psc->configs = NULL; /* NOTE: just for paranoia */ + } + if (psc->visuals) { + glx_config_destroy_list(psc->visuals); + psc->visuals = NULL; /* NOTE: just for paranoia */ + } + Xfree((char *) psc->serverGLXexts); +} + /* ** Allocate the memory for the per screen configs for each screen. ** If that works then fetch the per screen configs data. |