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