diff options
Diffstat (limited to 'base/threading/thread_local_storage.cc')
-rw-r--r-- | base/threading/thread_local_storage.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/base/threading/thread_local_storage.cc b/base/threading/thread_local_storage.cc index 48c1dd58c2..90ae69e90e 100644 --- a/base/threading/thread_local_storage.cc +++ b/base/threading/thread_local_storage.cc @@ -247,6 +247,17 @@ void PlatformThreadLocalStorage::OnThreadExit() { void PlatformThreadLocalStorage::OnThreadExit(void* value) { OnThreadExitInternal(static_cast<TlsVectorEntry*>(value)); } + +// static +void PlatformThreadLocalStorage::ForceFreeTLS() { + PlatformThreadLocalStorage::TLSKey key = + base::subtle::NoBarrier_AtomicExchange( + &g_native_tls_key, + PlatformThreadLocalStorage::TLS_KEY_OUT_OF_INDEXES); + if (key == PlatformThreadLocalStorage::TLS_KEY_OUT_OF_INDEXES) + return; + PlatformThreadLocalStorage::FreeTLS(key); +} #endif // defined(OS_WIN) } // namespace internal |