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