1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/threading/thread_local_storage.h" 6 7 #include "base/logging.h" 8 9 namespace base { 10 Slot(TLSDestructorFunc destructor)11ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor) 12 : initialized_(false), 13 key_(0) { 14 Initialize(destructor); 15 } 16 Initialize(TLSDestructorFunc destructor)17bool ThreadLocalStorage::Slot::Initialize(TLSDestructorFunc destructor) { 18 DCHECK(!initialized_); 19 int error = pthread_key_create(&key_, destructor); 20 if (error) { 21 NOTREACHED(); 22 return false; 23 } 24 25 initialized_ = true; 26 return true; 27 } 28 Free()29void ThreadLocalStorage::Slot::Free() { 30 DCHECK(initialized_); 31 int error = pthread_key_delete(key_); 32 if (error) 33 NOTREACHED(); 34 initialized_ = false; 35 } 36 Get() const37void* ThreadLocalStorage::Slot::Get() const { 38 DCHECK(initialized_); 39 return pthread_getspecific(key_); 40 } 41 Set(void * value)42void ThreadLocalStorage::Slot::Set(void* value) { 43 DCHECK(initialized_); 44 int error = pthread_setspecific(key_, value); 45 if (error) 46 NOTREACHED(); 47 } 48 49 } // namespace base 50