Home | History | Annotate | Download | only in threading
      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 
     11 ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor)
     12     : initialized_(false),
     13       key_(0) {
     14   Initialize(destructor);
     15 }
     16 
     17 bool 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 
     29 void ThreadLocalStorage::Slot::Free() {
     30   DCHECK(initialized_);
     31   int error = pthread_key_delete(key_);
     32   if (error)
     33     NOTREACHED();
     34   initialized_ = false;
     35 }
     36 
     37 void* ThreadLocalStorage::Slot::Get() const {
     38   DCHECK(initialized_);
     39   return pthread_getspecific(key_);
     40 }
     41 
     42 void 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