summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yiwei Zhang <zzyiwei@google.com> 2019-09-08 09:22:38 -0700
committer android-build-merger <android-build-merger@google.com> 2019-09-08 09:22:38 -0700
commit1d177631d6ac1724d34f6dc5a1a70c60794c38c5 (patch)
treeaa68fab36bc797657dd754bc828cfef271ec9f50
parent53dc67599a67de44ba4681e5a2ccc83b8fcb2f53 (diff)
parent31397a6eeee45306b989a9df7a5b0137d1bd066f (diff)
Merge "opengl: fix a race condition when unloading gl driver" am: e380e5d82f am: b9a4f9efdd
am: 31397a6eee Change-Id: I10d3c6feb63dc5a515ec8f5eadb3ca54d6d63e95
-rw-r--r--opengl/libs/EGL/eglApi.cpp19
1 files changed, 7 insertions, 12 deletions
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index 29a966d348..c51a1295e7 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -40,7 +40,6 @@ static inline void clearError() {
EGLDisplay eglGetDisplay(EGLNativeDisplayType display) {
ATRACE_CALL();
- clearError();
if (egl_init_drivers() == EGL_FALSE) {
return setError(EGL_BAD_PARAMETER, EGL_NO_DISPLAY);
@@ -48,6 +47,7 @@ EGLDisplay eglGetDisplay(EGLNativeDisplayType display) {
// Call down the chain, which usually points directly to the impl
// but may also be routed through layers
+ clearError();
egl_connection_t* const cnx = &gEGLImpl;
return cnx->platform.eglGetDisplay(display);
}
@@ -55,7 +55,6 @@ EGLDisplay eglGetDisplay(EGLNativeDisplayType display) {
EGLDisplay eglGetPlatformDisplay(EGLenum platform, EGLNativeDisplayType display,
const EGLAttrib* attrib_list) {
ATRACE_CALL();
- clearError();
if (egl_init_drivers() == EGL_FALSE) {
return setError(EGL_BAD_PARAMETER, EGL_NO_DISPLAY);
@@ -63,6 +62,7 @@ EGLDisplay eglGetPlatformDisplay(EGLenum platform, EGLNativeDisplayType display,
// Call down the chain, which usually points directly to the impl
// but may also be routed through layers
+ clearError();
egl_connection_t* const cnx = &gEGLImpl;
return cnx->platform.eglGetPlatformDisplay(platform, display, attrib_list);
}
@@ -239,13 +239,12 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char* procname)
// in which case we must make sure we've initialized ourselves, this
// happens the first time egl_get_display() is called.
- clearError();
-
if (egl_init_drivers() == EGL_FALSE) {
setError(EGL_BAD_PARAMETER, NULL);
return nullptr;
}
+ clearError();
egl_connection_t* const cnx = &gEGLImpl;
return cnx->platform.eglGetProcAddress(procname);
}
@@ -324,23 +323,21 @@ EGLBoolean eglWaitClient(void) {
}
EGLBoolean eglBindAPI(EGLenum api) {
- clearError();
-
if (egl_init_drivers() == EGL_FALSE) {
return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE);
}
+ clearError();
egl_connection_t* const cnx = &gEGLImpl;
return cnx->platform.eglBindAPI(api);
}
EGLenum eglQueryAPI(void) {
- clearError();
-
if (egl_init_drivers() == EGL_FALSE) {
return setError(EGL_BAD_PARAMETER, (EGLBoolean)EGL_FALSE);
}
+ clearError();
egl_connection_t* const cnx = &gEGLImpl;
return cnx->platform.eglQueryAPI();
}
@@ -595,23 +592,21 @@ EGLClientBuffer eglGetNativeClientBufferANDROID(const AHardwareBuffer* buffer) {
}
EGLuint64NV eglGetSystemTimeFrequencyNV() {
- clearError();
-
if (egl_init_drivers() == EGL_FALSE) {
return setError(EGL_BAD_PARAMETER, (EGLuint64NV)EGL_FALSE);
}
+ clearError();
egl_connection_t* const cnx = &gEGLImpl;
return cnx->platform.eglGetSystemTimeFrequencyNV();
}
EGLuint64NV eglGetSystemTimeNV() {
- clearError();
-
if (egl_init_drivers() == EGL_FALSE) {
return setError(EGL_BAD_PARAMETER, (EGLuint64NV)EGL_FALSE);
}
+ clearError();
egl_connection_t* const cnx = &gEGLImpl;
return cnx->platform.eglGetSystemTimeNV();
}