Home | History | Annotate | Download | only in base
      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