|
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 } |