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