glx: fix GLXChangeDrawableAttributesSGIX request
[mesa.git] / src / glx / indirect_glx.c
index cbc3129a5b979be86293da13aa3677c8062f9c2d..1870edee37137d243356a770018dce61abee9040 100644 (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 && !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);
 
@@ -166,14 +168,18 @@ indirect_unbind_context(struct glx_context *gc, struct glx_context *new)
    int opcode = __glXSetupForCommand(dpy);
    xGLXMakeCurrentReply reply;
 
+   if (gc == new)
+      return;
+   
    /* We are either switching to no context, away from a indirect
     * 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