aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/glx/glxext.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2009-09-02 19:53:35 +0000
committermarha <marha@users.sourceforge.net>2009-09-02 19:53:35 +0000
commit6f25a23db1df27e992c34f6fd4c82e83c44fc2e2 (patch)
treea49e113cbab862b959559a047afef689df50e492 /xorg-server/glx/glxext.c
parent78b8aacf420184834a24f11d138b88c2f3ed09d1 (diff)
downloadvcxsrv-6f25a23db1df27e992c34f6fd4c82e83c44fc2e2.tar.gz
vcxsrv-6f25a23db1df27e992c34f6fd4c82e83c44fc2e2.tar.bz2
vcxsrv-6f25a23db1df27e992c34f6fd4c82e83c44fc2e2.zip
Switched to xorg-server-1.6.3.901.tar.gz
Diffstat (limited to 'xorg-server/glx/glxext.c')
-rw-r--r--xorg-server/glx/glxext.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/xorg-server/glx/glxext.c b/xorg-server/glx/glxext.c
index fe99e4e80..ca1d2ec8d 100644
--- a/xorg-server/glx/glxext.c
+++ b/xorg-server/glx/glxext.c
@@ -127,6 +127,33 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
__GLXcontext *c;
for (c = glxAllContexts; c; c = c->next) {
+ if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) {
+ int i;
+
+ (*c->loseCurrent)(c);
+ c->isCurrent = GL_FALSE;
+ if (c == __glXLastContext)
+ __glXFlushContextCache();
+
+ for (i = 1; i < currentMaxClients; i++) {
+ if (clients[i]) {
+ __GLXclientState *cl = glxGetClient(clients[i]);
+
+ if (cl->inUse) {
+ int j;
+
+ for (j = 0; j < cl->numCurrentContexts; j++) {
+ if (cl->currentContexts[j] == c)
+ cl->currentContexts[j] = NULL;
+ }
+ }
+ }
+ }
+
+ if (!c->idExists) {
+ __glXFreeContext(c);
+ }
+ }
if (c->drawPriv == glxPriv)
c->drawPriv = NULL;
if (c->readPriv == glxPriv)