1 // Copyright (c) 2012 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 11 ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor) { 12 initialized_ = false; 13 key_ = 0; 14 Initialize(destructor); 15 } 16 17 bool ThreadLocalStorage::StaticSlot::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 29 void ThreadLocalStorage::StaticSlot::Free() { 30 DCHECK(initialized_); 31 int error = pthread_key_delete(key_); 32 if (error) 33 NOTREACHED(); 34 initialized_ = false; 35 } 36 37 void* ThreadLocalStorage::StaticSlot::Get() const { 38 DCHECK(initialized_); 39 return pthread_getspecific(key_); 40 } 41 42 void ThreadLocalStorage::StaticSlot::Set(void* value) { 43 DCHECK(initialized_); 44 int error = pthread_setspecific(key_, value); 45 if (error) 46 NOTREACHED(); 47 } 48 49 } // namespace base 50