From 11cf3cb2c463cf8af8a7e63eb9521979bfd303f8 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 26 Jan 2010 17:22:21 +0800 Subject: egl: Fix leaks in eglReleaseThread. There may be multiple bound contexts that should be unbound. --- src/egl/main/eglapi.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/egl/main/eglapi.c') diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index c197cfd38f..2e5027a32e 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); + } } } -- cgit v1.2.3