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:
committed by
Kristian Høgsberg
parent
a7c4541d27
commit
23e2dec1a1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user