summaryrefslogtreecommitdiff
path: root/glx/glxext.c
diff options
context:
space:
mode:
authorYaakov Selkowitz <yselkowitz@users.sourceforge.net>2010-04-26 11:40:57 -0500
committerYaakov Selkowitz <yselkowitz@users.sourceforge.net>2010-04-26 11:40:57 -0500
commitbe4b761f78e8c767915c15bbed3be23f0aec4db3 (patch)
tree96988d438d57dc98318bf2aa637897370ec43e97 /glx/glxext.c
parent4ae527cec2cd01a973351a8dec9816413522c963 (diff)
parentb557571dbff3d9a615e03cad904d46b8af9153a0 (diff)
Merge remote branch 'origin/master' into cygwincygwin
Diffstat (limited to 'glx/glxext.c')
-rw-r--r--glx/glxext.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/glx/glxext.c b/glx/glxext.c
index 59bcfbed2..89e58b0b0 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -126,6 +126,17 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
{
__GLXcontext *c;
+ /* If this drawable was created using glx 1.3 drawable
+ * constructors, we added it as a glx drawable resource under both
+ * its glx drawable ID and it X drawable ID. Remove the other
+ * resource now so we don't a callback for freed memory. */
+ if (glxPriv->drawId != glxPriv->pDraw->id) {
+ if (xid == glxPriv->drawId)
+ FreeResourceByType(glxPriv->pDraw->id, __glXDrawableRes, TRUE);
+ else
+ FreeResourceByType(glxPriv->drawId, __glXDrawableRes, TRUE);
+ }
+
for (c = glxAllContexts; c; c = c->next) {
if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) {
int i;