GLX: attempt to fix glean makeCurrent test cases.
authorBrian Paul <brianp@vmware.com>
Wed, 17 Jun 2009 13:58:35 +0000 (07:58 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 17 Jun 2009 14:03:19 +0000 (08:03 -0600)
Two parts to this:

One we don't keep pointers to possibly freed memory anymore once we unbind the
drawables from the context. Brian I need to figure out what the comment
you made there, can we get a glean/piglit test so we can fix it properly?

If the new gc is the same as the oldGC, we call the unbind even though
we just bound it in that function. doh.

(cherry picked from master, commit 77506dac8e81e9548a7e9680ce367175fe5747af)

src/glx/x11/glxcurrent.c
src/mesa/drivers/dri/common/dri_util.c

index 01f42332413ea0efb323f33a828e85ffe14ba1c6..d44e0dd1fc82879a87fb7928087b535caef2718f 100644 (file)
@@ -457,7 +457,7 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
                                     &dummy_reply);
    }
 #ifdef GLX_DIRECT_RENDERING
-   else if (oldGC->driContext) {
+   else if (oldGC->driContext && oldGC != gc) {
       oldGC->driContext->unbindContext(oldGC->driContext);
    }
 #endif
index e112720471879f97c93551a995b017969a6c8604..576494940f38f5eedcadf3aacbc28f8b8b7b2fcd 100644 (file)
@@ -119,6 +119,9 @@ static int driUnbindContext(__DRIcontext *pcp)
     pdp = pcp->driDrawablePriv;
     prp = pcp->driReadablePriv;
 
+    /* already unbound */
+    if (!pdp && !prp)
+      return GL_TRUE;
     /* Let driver unbind drawable from context */
     (*psp->DriverAPI.UnbindContext)(pcp);
 
@@ -143,9 +146,10 @@ static int driUnbindContext(__DRIcontext *pcp)
      * window we can determine the last context bound to the window and
      * use that context's lock. (BrianP, 2-Dec-2000)
      */
+    pcp->driDrawablePriv = pcp->driReadablePriv = NULL;
+
 #if 0
     /* Unbind the drawable */
-    pcp->driDrawablePriv = NULL;
     pdp->driContextPriv = &psp->dummyContextPriv;
 #endif