1b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Use of this source code is governed by a BSD-style license that can be
3b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// found in the LICENSE file.
4b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
5b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/threading/thread_local_storage.h"
6b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
7b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/logging.h"
8b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
9b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratnamespace base {
10b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
11b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratnamespace internal {
12b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
13b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratbool PlatformThreadLocalStorage::AllocTLS(TLSKey* key) {
14b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  return !pthread_key_create(key,
15b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat      base::internal::PlatformThreadLocalStorage::OnThreadExit);
16b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
17b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
18b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratvoid PlatformThreadLocalStorage::FreeTLS(TLSKey key) {
19b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  int ret = pthread_key_delete(key);
20b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  DCHECK_EQ(ret, 0);
21b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
22b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
23b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratvoid* PlatformThreadLocalStorage::GetTLSValue(TLSKey key) {
24b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  return pthread_getspecific(key);
25b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
26b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
27b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratvoid PlatformThreadLocalStorage::SetTLSValue(TLSKey key, void* value) {
28b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  int ret = pthread_setspecific(key, value);
29b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat  DCHECK_EQ(ret, 0);
30b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}
31b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
32b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}  // namespace internal
33b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat
34b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}  // namespace base
35