--- src/libANGLE/Context.cpp 2026-01-07 08:40:27.000000000 +0800 +++ src/libANGLE/Context.cpp 2026-01-11 03:25:32.000000000 +0800 @@ -64,7 +64,7 @@ #include "libANGLE/validationES.h" #if defined(ANGLE_PLATFORM_APPLE) -# include +# include # include "common/tls.h" #endif @@ -609,15 +609,22 @@ #if defined(ANGLE_PLATFORM_APPLE) // TODO(http://anglebug.com/42264979): Due to a bug in Apple's dyld loader, `thread_local` will // cause excessive memory use. Temporarily avoid it by using pthread's thread local storage instead. +namespace +{ +angle::TLSIndex g_CurrentValidContextIndex = TLS_INVALID_INDEX; +pthread_once_t g_CurrentValidContextIndexOnce = PTHREAD_ONCE_INIT; + +void InitCurrentValidContextTLSIndex() +{ + ASSERT(g_CurrentValidContextIndex == TLS_INVALID_INDEX); + g_CurrentValidContextIndex = angle::CreateTLSIndex(nullptr); +} +} // anonymous namespace + static angle::TLSIndex GetCurrentValidContextTLSIndex() { - static angle::TLSIndex CurrentValidContextIndex = TLS_INVALID_INDEX; - static dispatch_once_t once; - dispatch_once(&once, ^{ - ASSERT(CurrentValidContextIndex == TLS_INVALID_INDEX); - CurrentValidContextIndex = angle::CreateTLSIndex(nullptr); - }); - return CurrentValidContextIndex; + pthread_once(&g_CurrentValidContextIndexOnce, InitCurrentValidContextTLSIndex); + return g_CurrentValidContextIndex; } Context *GetCurrentValidContextTLS() {