blob: db8e81041748903c4af755b61259ee30336bc6fc [file] [log] [blame]
// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "base/threading/thread_local_storage.h"
#include "base/logging.h"
namespace base {
ThreadLocalStorage::Slot::Slot(TLSDestructorFunc destructor) {
initialized_ = false;
key_ = kSbThreadLocalKeyInvalid;
Initialize(destructor);
}
bool ThreadLocalStorage::StaticSlot::Initialize(TLSDestructorFunc destructor) {
DCHECK(!initialized_);
key_ = SbThreadCreateLocalKey(destructor);
if (!SbThreadIsValidLocalKey(key_)) {
NOTREACHED();
return false;
}
initialized_ = true;
return true;
}
void ThreadLocalStorage::StaticSlot::Free() {
DCHECK(initialized_);
SbThreadDestroyLocalKey(key_);
initialized_ = false;
}
void* ThreadLocalStorage::StaticSlot::Get() const {
DCHECK(initialized_);
return SbThreadGetLocalValue(key_);
}
void ThreadLocalStorage::StaticSlot::Set(void* value) {
DCHECK(initialized_);
if (!SbThreadSetLocalValue(key_, value)) {
NOTREACHED();
}
}
} // namespace base