glx: don't destroy context immediately if it's currently bound
authorBrian Paul <brianp@vmware.com>
Fri, 23 Oct 2009 00:19:01 +0000 (18:19 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 23 Oct 2009 00:20:28 +0000 (18:20 -0600)
According to the GLXDestroyContext() man page, the context should not
immediately be destroyed if it's bound to some thread.  Wait until it's
unbound to really delete it.  The code for doing the later part is
already present in MakeContextCurrent() so no change was needed there.

src/glx/x11/glxcmds.c

index cd4aede74e4ecddd2ac1d3f345beef6dbd56c6a1..c63116bab771fa32ae29924600be7bca20bd95fc 100644 (file)
@@ -540,6 +540,16 @@ DestroyContext(Display * dpy, GLXContext gc)
    imported = gc->imported;
    gc->xid = None;
 
+   if (gc->currentDpy) {
+      /* This context is bound to some thread.  According to the man page,
+       * we should not actually delete the context until it's unbound.
+       * Note that we set gc->xid = None above.  In MakeContextCurrent()
+       * we check for that and delete the context there.
+       */
+      __glXUnlock();
+      return;
+   }
+
 #ifdef GLX_DIRECT_RENDERING
    /* Destroy the direct rendering context */
    if (gc->driContext) {