Mesa (master): egl: Fix leaks in eglReleaseThread.

Chia-I Wu olv at kemper.freedesktop.org
Tue Jan 26 10:47:33 UTC 2010


Module: Mesa
Branch: master
Commit: 11cf3cb2c463cf8af8a7e63eb9521979bfd303f8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=11cf3cb2c463cf8af8a7e63eb9521979bfd303f8

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Tue Jan 26 17:22:21 2010 +0800

egl: Fix leaks in eglReleaseThread.

There may be multiple bound contexts that should be unbound.

---

 src/egl/main/eglapi.c |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index c197cfd..2e5027a 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);
+         }
       }
    }
 




More information about the mesa-commit mailing list