Index: trunk/src/base/threading/thread_local_storage_posix.cc |
=================================================================== |
--- trunk/src/base/threading/thread_local_storage_posix.cc (revision 242548) |
+++ trunk/src/base/threading/thread_local_storage_posix.cc (working copy) |
@@ -8,27 +8,42 @@ |
namespace base { |
-namespace internal { |
+ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor) { |
+ initialized_ = false; |
+ key_ = 0; |
+ Initialize(destructor); |
+} |
-bool PlatformThreadLocalStorage::AllocTLS(TLSKey* key) { |
- return !pthread_key_create(key, |
- base::internal::PlatformThreadLocalStorage::OnThreadExit); |
+bool ThreadLocalStorage::StaticSlot::Initialize(TLSDestructorFunc destructor) { |
+ DCHECK(!initialized_); |
+ int error = pthread_key_create(&key_, destructor); |
+ if (error) { |
+ NOTREACHED(); |
+ return false; |
+ } |
+ |
+ initialized_ = true; |
+ return true; |
} |
-void PlatformThreadLocalStorage::FreeTLS(TLSKey key) { |
- int ret = pthread_key_delete(key); |
- DCHECK_EQ(ret, 0); |
+void ThreadLocalStorage::StaticSlot::Free() { |
+ DCHECK(initialized_); |
+ int error = pthread_key_delete(key_); |
+ if (error) |
+ NOTREACHED(); |
+ initialized_ = false; |
} |
-void* PlatformThreadLocalStorage::GetTLSValue(TLSKey key) { |
- return pthread_getspecific(key); |
+void* ThreadLocalStorage::StaticSlot::Get() const { |
+ DCHECK(initialized_); |
+ return pthread_getspecific(key_); |
} |
-void PlatformThreadLocalStorage::SetTLSValue(TLSKey key, void* value) { |
- int ret = pthread_setspecific(key, value); |
- DCHECK_EQ(ret, 0); |
+void ThreadLocalStorage::StaticSlot::Set(void* value) { |
+ DCHECK(initialized_); |
+ int error = pthread_setspecific(key_, value); |
+ if (error) |
+ NOTREACHED(); |
} |
-} // namespace internal |
- |
} // namespace base |