1// Copyright (c) 2010 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.h"
6
7#include <windows.h>
8
9#include "base/logging.h"
10
11namespace base {
12namespace internal {
13
14// static
15void ThreadLocalPlatform::AllocateSlot(SlotType* slot) {
16  *slot = TlsAlloc();
17  CHECK_NE(*slot, TLS_OUT_OF_INDEXES);
18}
19
20// static
21void ThreadLocalPlatform::FreeSlot(SlotType slot) {
22  if (!TlsFree(slot)) {
23    NOTREACHED() << "Failed to deallocate tls slot with TlsFree().";
24  }
25}
26
27// static
28void* ThreadLocalPlatform::GetValueFromSlot(SlotType slot) {
29  return TlsGetValue(slot);
30}
31
32// static
33void ThreadLocalPlatform::SetValueInSlot(SlotType slot, void* value) {
34  if (!TlsSetValue(slot, value)) {
35    LOG(FATAL) << "Failed to TlsSetValue().";
36  }
37}
38
39}  // namespace internal
40}  // namespace base
41