1 // Copyright (c) 2006-2008 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/thread_local_storage.h" 6 7 #include "base/logging.h" 8 9 ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor) 10 : initialized_(false) { 11 Initialize(destructor); 12 } 13 14 bool ThreadLocalStorage::Slot::Initialize(TLSDestructorFunc destructor) { 15 DCHECK(!initialized_); 16 int error = pthread_key_create(&key_, destructor); 17 if (error) { 18 NOTREACHED(); 19 return false; 20 } 21 22 initialized_ = true; 23 return true; 24 } 25 26 void ThreadLocalStorage::Slot::Free() { 27 DCHECK(initialized_); 28 int error = pthread_key_delete(key_); 29 if (error) 30 NOTREACHED(); 31 initialized_ = false; 32 } 33 34 void* ThreadLocalStorage::Slot::Get() const { 35 DCHECK(initialized_); 36 return pthread_getspecific(key_); 37 } 38 39 void ThreadLocalStorage::Slot::Set(void* value) { 40 DCHECK(initialized_); 41 int error = pthread_setspecific(key_, value); 42 if (error) 43 NOTREACHED(); 44 } 45