diff options
author | marha <marha@users.sourceforge.net> | 2011-01-17 11:45:05 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-01-17 11:45:05 +0000 |
commit | 508dc9ebf90c336c43608a7b8e94d0d2bdf6c1aa (patch) | |
tree | 7f99f9df965eab67cdbb5ff4d33624bf50221033 | |
parent | 260ff71e2ae7eac8d6856523bf4d92ac8e2c507f (diff) | |
download | vcxsrv-508dc9ebf90c336c43608a7b8e94d0d2bdf6c1aa.tar.gz vcxsrv-508dc9ebf90c336c43608a7b8e94d0d2bdf6c1aa.tar.bz2 vcxsrv-508dc9ebf90c336c43608a7b8e94d0d2bdf6c1aa.zip |
Previous fix in glxext.c was to drastically. It could cause crashes.
-rw-r--r-- | xorg-server/glx/glxcmds.c | 6 | ||||
-rw-r--r-- | xorg-server/glx/glxext.c | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/xorg-server/glx/glxcmds.c b/xorg-server/glx/glxcmds.c index 4a9f61d35..a685c8c7a 100644 --- a/xorg-server/glx/glxcmds.c +++ b/xorg-server/glx/glxcmds.c @@ -217,6 +217,12 @@ static struct glx_context *__glXdirectContextCreate(__GLXscreen *screen, return context;
}
+void FlushContext(struct glx_context *cx)
+{
+ CALL_Flush( GET_DISPATCH(), () );
+ __GLX_NOTE_FLUSHED_CMDS(cx);
+}
+
/**
* Create a GL context with the given properties. This routine is used
* to implement \c glXCreateContext, \c glXCreateNewContext, and
diff --git a/xorg-server/glx/glxext.c b/xorg-server/glx/glxext.c index 958c5b544..89c1030f7 100644 --- a/xorg-server/glx/glxext.c +++ b/xorg-server/glx/glxext.c @@ -49,6 +49,8 @@ #include "indirect_table.h"
#include "indirect_util.h"
+extern void FlushContext(struct glx_context *cx);
+
/*
** The last context used by the server. It is the context that is current
** from the server's perspective.
@@ -144,12 +146,14 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) {
int i;
+ FlushContext(c);
+
(*c->loseCurrent)(c);
c->isCurrent = GL_FALSE;
if (c == __glXLastContext)
__glXFlushContextCache();
-/*
- for (i = 1; i < currentMaxClients; i++) {
+ if (!c->idExists) {
+ for (i = 1; i < currentMaxClients; i++) {
if (clients[i]) {
__GLXclientState *cl = glxGetClient(clients[i]);
@@ -162,8 +166,8 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) }
}
}
+ }
}
-*/
}
if (c->drawPriv == glxPriv)
c->drawPriv = NULL;
|