Prevent repeatedly trying to load a non-existent library
A hang in Chromium on MacOS seems related to attempting to load
libGLES_CM repeatedly, since it doesn't exist. While dlopen()
probably shouldn't be this slow, it could also be related to a
sandboxing issue. In any case, this cl attempts to go around the
issue by never trying to load a library twice.
Bug chromium:904346
Change-Id: I65122f0fc9acb4f8db2a606437c61796464f72ad
Reviewed-on: https://swiftshader-review.googlesource.com/c/22468
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libEGL/libEGL.hpp b/src/OpenGL/libEGL/libEGL.hpp
index 7019338..4a95a5f 100644
--- a/src/OpenGL/libEGL/libEGL.hpp
+++ b/src/OpenGL/libEGL/libEGL.hpp
@@ -90,7 +90,7 @@
private:
LibEGLexports *loadExports()
{
- if(!libEGL)
+ if(!loadLibraryAttempted && !libEGL)
{
#if defined(_WIN32)
#if defined(__LP64__)
@@ -126,6 +126,8 @@
auto libEGL_swiftshader = (LibEGLexports *(*)())getProcAddress(libEGL, "libEGL_swiftshader");
libEGLexports = libEGL_swiftshader();
}
+
+ loadLibraryAttempted = true;
}
return libEGLexports;
@@ -133,6 +135,7 @@
void *libEGL = nullptr;
LibEGLexports *libEGLexports = nullptr;
+ bool loadLibraryAttempted = false;
};
#endif // libEGL_hpp
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.hpp b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
index ae6237b..80ce1f2 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
@@ -251,7 +251,7 @@
private:
LibGLES_CMexports *loadExports()
{
- if(!libGLES_CM)
+ if(!loadLibraryAttempted && !libGLES_CM)
{
#if defined(_WIN32)
#if defined(__LP64__)
@@ -287,6 +287,8 @@
auto libGLES_CM_swiftshader = (LibGLES_CMexports *(*)())getProcAddress(libGLES_CM, "libGLES_CM_swiftshader");
libGLES_CMexports = libGLES_CM_swiftshader();
}
+
+ loadLibraryAttempted = true;
}
return libGLES_CMexports;
@@ -294,6 +296,7 @@
void *libGLES_CM = nullptr;
LibGLES_CMexports *libGLES_CMexports = nullptr;
+ bool loadLibraryAttempted = false;
};
#endif // libGLES_CM_hpp
diff --git a/src/OpenGL/libGLESv2/libGLESv2.hpp b/src/OpenGL/libGLESv2/libGLESv2.hpp
index f029f38..24d9e92 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.hpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.hpp
@@ -276,7 +276,7 @@
private:
LibGLESv2exports *loadExports()
{
- if(!libGLESv2)
+ if(!loadLibraryAttempted && !libGLESv2)
{
#if defined(_WIN32)
#if defined(__LP64__)
@@ -312,6 +312,8 @@
auto libGLESv2_swiftshader = (LibGLESv2exports *(*)())getProcAddress(libGLESv2, "libGLESv2_swiftshader");
libGLESv2exports = libGLESv2_swiftshader();
}
+
+ loadLibraryAttempted = true;
}
return libGLESv2exports;
@@ -319,6 +321,7 @@
void *libGLESv2 = nullptr;
LibGLESv2exports *libGLESv2exports = nullptr;
+ bool loadLibraryAttempted = false;
};
#endif // libGLESv2_hpp