diff options
author | Jamie Gennis <jgennis@google.com> | 2011-01-30 15:59:36 -0800 |
---|---|---|
committer | Jamie Gennis <jgennis@google.com> | 2011-01-30 15:59:36 -0800 |
commit | ae2aa286af67f7990486ca6476e73f677c58872b (patch) | |
tree | 6566ba54a3bf666d9c93425d1f14afe9c38f0a5b /opengl/libagl | |
parent | 0982dc6488a921d9d54d23b9180a9acf33c61526 (diff) | |
download | frameworks_base-ae2aa286af67f7990486ca6476e73f677c58872b.zip frameworks_base-ae2aa286af67f7990486ca6476e73f677c58872b.tar.gz frameworks_base-ae2aa286af67f7990486ca6476e73f677c58872b.tar.bz2 |
Fix a multithreading bug in libagl's EGL.
The bug caused libagl to return 0 from eglGetError if an EGL error value
(including EGL_SUCCESS) was set on a different thread but not yet on the
current thread.
Bug: 3403756
Change-Id: Ifd965091d116745c2e22c121151ade9e78eb14c6
Diffstat (limited to 'opengl/libagl')
-rw-r--r-- | opengl/libagl/egl.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp index 7ac6f92..a1cb23a 100644 --- a/opengl/libagl/egl.cpp +++ b/opengl/libagl/egl.cpp @@ -82,6 +82,11 @@ static GLint getError() { if (ggl_unlikely(gEGLErrorKey == -1)) return EGL_SUCCESS; GLint error = (GLint)pthread_getspecific(gEGLErrorKey); + if (error == 0) { + // The TLS key has been created by another thread, but the value for + // this thread has not been initialized. + return EGL_SUCCESS; + } pthread_setspecific(gEGLErrorKey, (void*)EGL_SUCCESS); return error; } |