From: Chia-I Wu Date: Tue, 26 Jan 2010 09:22:21 +0000 (+0800) Subject: egl: Fix leaks in eglReleaseThread. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=11cf3cb2c463cf8af8a7e63eb9521979bfd303f8;p=mesa.git egl: Fix leaks in eglReleaseThread. There may be multiple bound contexts that should be unbound. --- diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index c197cfd38f4..2e5027a32e6 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -984,13 +984,20 @@ eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLBoolean eglReleaseThread(void) { - /* unbind current context */ + /* unbind current contexts */ if (!_eglIsCurrentThreadDummy()) { - _EGLDisplay *disp = _eglGetCurrentDisplay(); - _EGLDriver *drv; - if (disp) { - drv = disp->Driver; - (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); + _EGLThreadInfo *t = _eglGetCurrentThread(); + EGLint i; + + for (i = 0; i < _EGL_API_NUM_APIS; i++) { + _EGLContext *ctx = t->CurrentContexts[i]; + if (ctx) { + _EGLDisplay *disp = ctx->Resource.Display; + _EGLDriver *drv = disp->Driver; + /* what if drv is not avaialbe? */ + if (drv) + (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); + } } }