Index: runtime/platform/thread_win.cc |
diff --git a/runtime/platform/thread_win.cc b/runtime/platform/thread_win.cc |
index 17d3c59867a6762ceb9b563543faa124d28689ff..3c32bf7cdada118cef4665b73d912c4f4d3b02ff 100644 |
--- a/runtime/platform/thread_win.cc |
+++ b/runtime/platform/thread_win.cc |
@@ -62,6 +62,42 @@ int Thread::Start(ThreadStartFunction function, uword parameter) { |
} |
+ThreadLocalKey Thread::kInvalidThreadLocal = TLS_OUT_OF_INDEXES; |
+ |
+ |
+ThreadLocalKey Thread::CreateThreadLocal() { |
+ ThreadLocalKey key = TlsAlloc(); |
+ if (key == kInvalidThreadLocal) { |
+ FATAL("TlsAlloc failed"); |
+ } |
+ return key; |
+} |
+ |
+ |
+void Thread::DeleteThreadLocal(ThreadLocalKey key) { |
+ ASSERT(key != kInvalidThreadLocal); |
+ BOOL result = TlsFree(key); |
+ if (!result) { |
+ FATAL("TlsFree failed"); |
+ } |
+} |
+ |
+ |
+uword Thread::GetThreadLocal(ThreadLocalKey key) { |
+ ASSERT(key != kInvalidThreadLocal); |
+ return reinterpret_cast<uword>(TlsGetValue(key)); |
+} |
+ |
+ |
+void Thread::SetThreadLocal(ThreadLocalKey key, uword value) { |
+ ASSERT(key != kInvalidThreadLocal); |
+ BOOL result = TlsSetValue(key, reinterpret_cast<void*>(value)); |
+ if (!result) { |
+ FATAL("TlsSetValue failed"); |
+ } |
+} |
+ |
+ |
Mutex::Mutex() { |
// Allocate unnamed semaphore with initial count 1 and max count 1. |
data_.semaphore_ = CreateSemaphore(NULL, 1, 1, NULL); |