glx: Only clear the stored context tag when the context has been unbound

The calling order of ->bind and ->unbind changed and then ->unbind would
clear the currentContextTag of the old context before ->bind could reuse
it in the make current request, in the indirect case.

Instead, clear the old currentContextTag if and only if we send a request
to the server to actually unbind it or reassign it to another context.

https://bugs.freedesktop.org/show_bug.cgi?id=29977

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
Jon TURNEY
2010-09-07 11:36:07 +01:00
committed by Kristian Høgsberg
parent a7c4541d27
commit 23e2dec1a1
+8 -5
View File
@@ -137,10 +137,12 @@ indirect_bind_context(struct glx_context *gc, struct glx_context *old,
Display *dpy = gc->psc->dpy;
int opcode = __glXSetupForCommand(dpy);
if (old != &dummyContext && !old->isDirect && old->psc->dpy == dpy)
if (old != &dummyContext && !old->isDirect && old->psc->dpy == dpy) {
tag = old->currentContextTag;
else
tag = None;
old->currentContextTag = 0;
} else {
tag = 0;
}
SendMakeCurrentRequest(dpy, opcode, gc->xid, tag, draw, read, &reply);
@@ -170,10 +172,11 @@ indirect_unbind_context(struct glx_context *gc, struct glx_context *new)
* context to a direct context or from one dpy to another and have
* to send a request to the dpy to unbind the previous context.
*/
if (!new || new->isDirect || new->psc->dpy != dpy)
if (!new || new->isDirect || new->psc->dpy != dpy) {
SendMakeCurrentRequest(dpy, opcode, None,
gc->currentContextTag, None, None, &reply);
gc->currentContextTag = 0;
gc->currentContextTag = 0;
}
}
static void