1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be 33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file. 43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/threading/thread_checker_impl.h" 6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 73f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace base { 83f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 9dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenThreadCheckerImpl::ThreadCheckerImpl() 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : valid_thread_id_(kInvalidThreadId) { 11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EnsureThreadIdAssigned(); 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 14dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenThreadCheckerImpl::~ThreadCheckerImpl() {} 15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool ThreadCheckerImpl::CalledOnValidThread() const { 17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EnsureThreadIdAssigned(); 18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutoLock auto_lock(lock_); 19201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return valid_thread_id_ == PlatformThread::CurrentId(); 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid ThreadCheckerImpl::DetachFromThread() { 23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutoLock auto_lock(lock_); 24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch valid_thread_id_ = kInvalidThreadId; 25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid ThreadCheckerImpl::EnsureThreadIdAssigned() const { 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutoLock auto_lock(lock_); 29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (valid_thread_id_ != kInvalidThreadId) 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch valid_thread_id_ = PlatformThread::CurrentId(); 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} // namespace base 35