Home | History | Annotate | Download | only in threading
      1 // Copyright (c) 2011 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_checker_impl.h"
      6 
      7 namespace base {
      8 
      9 ThreadCheckerImpl::ThreadCheckerImpl()
     10     : valid_thread_id_() {
     11   EnsureThreadIdAssigned();
     12 }
     13 
     14 ThreadCheckerImpl::~ThreadCheckerImpl() {}
     15 
     16 bool ThreadCheckerImpl::CalledOnValidThread() const {
     17   EnsureThreadIdAssigned();
     18   AutoLock auto_lock(lock_);
     19   return valid_thread_id_ == PlatformThread::CurrentRef();
     20 }
     21 
     22 void ThreadCheckerImpl::DetachFromThread() {
     23   AutoLock auto_lock(lock_);
     24   valid_thread_id_ = PlatformThreadRef();
     25 }
     26 
     27 void ThreadCheckerImpl::EnsureThreadIdAssigned() const {
     28   AutoLock auto_lock(lock_);
     29   if (valid_thread_id_.is_null()) {
     30     valid_thread_id_ = PlatformThread::CurrentRef();
     31   }
     32 }
     33 
     34 }  // namespace base
     35