From cd78f0d0fc08e4e2339ed09dad1a12802de7729c Mon Sep 17 00:00:00 2001 From: Pierre Willenbrock Date: Thu, 7 Feb 2008 21:28:28 +0100 Subject: [PATCH] AIGLX: Fix crash after client using GLX_EXT_texture_from_pixmap died. --- GL/glx/glxdri.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c index 6c1a199f7..e405ee06f 100644 --- a/GL/glx/glxdri.c +++ b/GL/glx/glxdri.c @@ -185,6 +185,42 @@ __glXDRIdrawableDestroy(__GLXdrawable *drawable) { __GLXDRIdrawable *private = (__GLXDRIdrawable *) drawable; + int i; + + for (i = 0; i < screenInfo.numScreens; i++) { + __GLXDRIscreen * const screen = (__GLXDRIscreen *) + glxGetScreen(screenInfo.screens[i]); + + GLuint lastOverride = screen->lastTexOffsetOverride; + + if (lastOverride) { + __GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride; + int i; + + for (i = 0; i < lastOverride; i++) { + if (texOffsetOverride[i] == private) { + + texOffsetOverride[i] = NULL; + + if (i + 1 == lastOverride) { + lastOverride = 0; + + while (i--) { + if (texOffsetOverride[i]) { + lastOverride = i + 1; + break; + } + } + + screen->lastTexOffsetOverride = lastOverride; + + break; + } + } + } + } + } + (*private->driDrawable.destroyDrawable)(&private->driDrawable); /* If the X window was destroyed, the dri DestroyWindow hook will