From 4e8f95f64d004aa1278609c5bbac9a53c0c6e4c9 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Wed, 9 Feb 2011 21:19:45 +0100 Subject: egl_dri2: Always unbind old contexts This fixes __DRIdrawable refcounting. Binding a context increases their refcount, so we need to decrease it. --- src/egl/drivers/dri2/egl_dri2.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src/egl') 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 { -- cgit v1.2.3