aboutsummaryrefslogtreecommitdiff
path: root/system/OpenglSystemCommon/ThreadInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'system/OpenglSystemCommon/ThreadInfo.cpp')
-rw-r--r--system/OpenglSystemCommon/ThreadInfo.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/system/OpenglSystemCommon/ThreadInfo.cpp b/system/OpenglSystemCommon/ThreadInfo.cpp
index 04ce5089..9e11624d 100644
--- a/system/OpenglSystemCommon/ThreadInfo.cpp
+++ b/system/OpenglSystemCommon/ThreadInfo.cpp
@@ -18,19 +18,30 @@
thread_store_t s_tls = THREAD_STORE_INITIALIZER;
+static bool sDefaultTlsDestructorCallback(void* ptr) { return true; }
+static bool (*sTlsDestructorCallback)(void*) = sDefaultTlsDestructorCallback;
+
static void tlsDestruct(void *ptr)
{
+ sTlsDestructorCallback(ptr);
if (ptr) {
EGLThreadInfo *ti = (EGLThreadInfo *)ptr;
delete ti->hostConn;
delete ti;
+#ifdef __ANDROID__
((void **)__get_tls())[TLS_SLOT_OPENGL] = NULL;
+#endif
}
}
-EGLThreadInfo *slow_getEGLThreadInfo()
+void setTlsDestructor(tlsDtorCallback func) {
+ sTlsDestructorCallback = func;
+}
+
+EGLThreadInfo *goldfish_get_egl_tls()
{
- EGLThreadInfo *ti = (EGLThreadInfo *)thread_store_get(&s_tls);
+ EGLThreadInfo* ti = (EGLThreadInfo*)thread_store_get(&s_tls);
+
if (ti) return ti;
ti = new EGLThreadInfo();