| Index: trunk/src/base/threading/thread_local_storage_posix.cc
|
| ===================================================================
|
| --- trunk/src/base/threading/thread_local_storage_posix.cc (revision 241151)
|
| +++ trunk/src/base/threading/thread_local_storage_posix.cc (working copy)
|
| @@ -8,25 +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) {
|
| - DCHECK_EQ(pthread_key_delete(key), 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) {
|
| - DCHECK_EQ(pthread_setspecific(key, value), 0);
|
| +void ThreadLocalStorage::StaticSlot::Set(void* value) {
|
| + DCHECK(initialized_);
|
| + int error = pthread_setspecific(key_, value);
|
| + if (error)
|
| + NOTREACHED();
|
| }
|
|
|
| -} // namespace internal
|
| -
|
| } // namespace base
|
|
|