fix drawables not getting freed if context is made current with new drawables
authorRoland Scheidegger <sroland@tungstengraphics.com>
Thu, 19 Jul 2007 14:41:14 +0000 (16:41 +0200)
committerRoland Scheidegger <sroland@tungstengraphics.com>
Thu, 19 Jul 2007 14:41:14 +0000 (16:41 +0200)
src/mesa/drivers/dri/common/dri_util.c

index dd52f7e915139458961190c6e2b9a29b5364278c..d785382f39d835c81286284469cad2ce47511091 100644 (file)
@@ -120,7 +120,7 @@ static __DRIdrawable *__driFindDrawable(void *drawHash, __DRIid draw)
  * Find drawables in the local hash that have been destroyed on the
  * server.
  * 
- * \param drawHash  Hash-table containing all know drawables.
+ * \param drawHash  Hash-table containing all known drawables.
  */
 static void __driGarbageCollectDrawables(void *drawHash)
 {
@@ -235,6 +235,12 @@ static GLboolean driUnbindContext(__DRInativeDisplay *dpy, int scrn,
        prp->refcount--;
     }
 
+   /* destroy the drawables if they no longer exist on the server */
+   if ((pdp->refcount == 0) || (prp->refcount == 0)) {
+      /* probably shouldn't need the collector here,
+         as we know the affected drawables (or could there be others?) */
+      __driGarbageCollectDrawables(pdp->driScreenPriv->drawHash);
+   }
 
     /* XXX this is disabled so that if we call SwapBuffers on an unbound
      * window we can determine the last context bound to the window and