- add sources.
[platform/framework/web/crosswalk.git] / src / base / threading / thread_local_storage_posix.cc
1 // Copyright (c) 2012 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::StaticSlot::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::StaticSlot::Free() {
30   DCHECK(initialized_);
31   int error = pthread_key_delete(key_);
32   if (error)
33     NOTREACHED();
34   initialized_ = false;
35 }
36
37 void* ThreadLocalStorage::StaticSlot::Get() const {
38   DCHECK(initialized_);
39   return pthread_getspecific(key_);
40 }
41
42 void ThreadLocalStorage::StaticSlot::Set(void* value) {
43   DCHECK(initialized_);
44   int error = pthread_setspecific(key_, value);
45   if (error)
46     NOTREACHED();
47 }
48
49 }  // namespace base