From 23e2dec1a1cae26430a988e0c74b1f2b13eb0f6f Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Tue, 7 Sep 2010 11:36:07 +0100 Subject: [PATCH] glx: Only clear the stored context tag when the context has been unbound MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Kristian Høgsberg --- src/glx/indirect_glx.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/glx/indirect_glx.c b/src/glx/indirect_glx.c index f0598409cd6..61ceed3d438 100644 --- a/src/glx/indirect_glx.c +++ b/src/glx/indirect_glx.c @@ -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 -- 2.30.2