thread_local_storage_posix.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
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 9namespace base { 10 11ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor) 12 : initialized_(false), 13 key_(0) { 14 Initialize(destructor); 15} 16 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 29void ThreadLocalStorage::Slot::Free() { 30 DCHECK(initialized_); 31 int error = pthread_key_delete(key_); 32 if (error) 33 NOTREACHED(); 34 initialized_ = false; 35} 36 37void* ThreadLocalStorage::Slot::Get() const { 38 DCHECK(initialized_); 39 return pthread_getspecific(key_); 40} 41 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