• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
Slot(TLSDestructorFunc destructor)11 ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor)
12     : initialized_(false),
13       key_(0) {
14   Initialize(destructor);
15 }
16 
Initialize(TLSDestructorFunc destructor)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 
Free()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 
Get() const37 void* ThreadLocalStorage::Slot::Get() const {
38   DCHECK(initialized_);
39   return pthread_getspecific(key_);
40 }
41 
Set(void * value)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