summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Verbeet <hverbeet@gmail.com>2011-07-18 00:42:27 +0200
committerHenri Verbeet <hverbeet@gmail.com>2011-07-19 23:29:16 +0200
commitd469ebaa0a1894e3cd25f556827f87a72f6369e1 (patch)
treedd95aed39540b7d9b1e5a0283bbb80fe3052f675
parentf5fa4606eab3def54d15f258c8575b2d1b07157d (diff)
glx: Avoid calling __glXInitialize() in driReleaseDrawables().
This fixes a regression introduced by commit a26121f37530619610a78a5fbe5ef87e44047fda (fd.o bug #39219). Since the __glXInitialize() call should be unnecessary anyway, this is probably a nicer fix for the original problem too. NOTE: This is a candidate for the 7.10 and 7.11 branches. Signed-off-by: Henri Verbeet <hverbeet@gmail.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Tested-by: padfoot@exemail.com.au (cherry picked from commit 0f20e2e18f902b4319851643e1775a18c2aacb3d)
-rw-r--r--src/glx/dri_common.c2
-rw-r--r--src/glx/glxext.c11
2 files changed, 4 insertions, 9 deletions
diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
index bac0c9e5911..e7dba5a68de 100644
--- a/src/glx/dri_common.c
+++ b/src/glx/dri_common.c
@@ -388,7 +388,7 @@ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable)
_X_HIDDEN void
driReleaseDrawables(struct glx_context *gc)
{
- struct glx_display *const priv = __glXInitialize(gc->psc->dpy);
+ const struct glx_display *priv = gc->psc->display;
__GLXDRIdrawable *pdraw;
if (priv == NULL)
diff --git a/src/glx/glxext.c b/src/glx/glxext.c
index 73c332793a0..f702e06dc7a 100644
--- a/src/glx/glxext.c
+++ b/src/glx/glxext.c
@@ -250,24 +250,19 @@ glx_display_free(struct glx_display *priv)
static int
__glXCloseDisplay(Display * dpy, XExtCodes * codes)
{
- struct glx_display *priv, **prev, *next;
+ struct glx_display *priv, **prev;
_XLockMutex(_Xglobal_lock);
prev = &glx_displays;
for (priv = glx_displays; priv; prev = &priv->next, priv = priv->next) {
if (priv->dpy == dpy) {
+ *prev = priv->next;
break;
}
}
+ _XUnlockMutex(_Xglobal_lock);
- /* Only remove the display from the list after it's destroyed. The cleanup
- * code (e.g. driReleaseDrawables()) ends up calling __glXInitialize(),
- * which would create a new glx_display while we're trying to destroy this
- * one. */
- next = priv->next;
glx_display_free(priv);
- *prev = next;
- _XUnlockMutex(_Xglobal_lock);
return 1;
}