diff options
| author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-02-09 21:19:45 +0100 | 
|---|---|---|
| committer | Kristian Høgsberg <krh@bitplanet.net> | 2011-02-10 23:07:01 -0500 | 
| commit | 4e8f95f64d004aa1278609c5bbac9a53c0c6e4c9 (patch) | |
| tree | e9c1bc3763bb4a17cfcbbc4dba9b8417927ff40d | |
| parent | 87dde5b1cd596c4008695ff2db9469f88c09f925 (diff) | |
egl_dri2: Always unbind old contexts
This fixes __DRIdrawable refcounting.
Binding a context increases their refcount,
so we need to decrease it.
| -rw-r--r-- | src/egl/drivers/dri2/egl_dri2.c | 21 | 
1 files changed, 11 insertions, 10 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 2c4deaf7c0..e0d2db9661 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -597,19 +597,20 @@ dri2_make_current(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *dsurf,     rdraw = (dri2_rsurf) ? dri2_rsurf->dri_drawable : NULL;     cctx = (dri2_ctx) ? dri2_ctx->dri_context : NULL; +   if (old_ctx) { +      __DRIcontext *old_cctx = dri2_egl_context(old_ctx)->dri_context; +      dri2_dpy->core->unbindContext(old_cctx); +   } +     if ((cctx == NULL && ddraw == NULL && rdraw == NULL) ||         dri2_dpy->core->bindContext(cctx, ddraw, rdraw)) { -      drv->API.DestroySurface(drv, disp, old_dsurf); -      drv->API.DestroySurface(drv, disp, old_rsurf); -      if (old_ctx) { -         /* unbind the old context only when there is no new context bound */ -         if (!ctx) { -            __DRIcontext *old_cctx = dri2_egl_context(old_ctx)->dri_context; -            dri2_dpy->core->unbindContext(old_cctx); -         } -         /* no destroy? */ +      if (old_dsurf) +         drv->API.DestroySurface(drv, disp, old_dsurf); +      if (old_rsurf) +         drv->API.DestroySurface(drv, disp, old_rsurf); +      /* no destroy? */ +      if (old_ctx)           _eglPutContext(old_ctx); -      }        return EGL_TRUE;     } else {  | 
