Merge branch 'i915tex_privbuffers' into softpipe_0_1_branch
[mesa.git] / src / mesa / drivers / dri / common / dri_util.c
index c30e66f1722c11b025b3ab3faa94f5155cb4fe1b..6e8a5b52180184fc163df96cc4b1bca92e0b86fb 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