| // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef BASE_THREADING_THREAD_CHECKER_IMPL_H_ | 
 | #define BASE_THREADING_THREAD_CHECKER_IMPL_H_ | 
 |  | 
 | #include "base/base_export.h" | 
 | #include "base/synchronization/lock.h" | 
 | #include "base/threading/platform_thread.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | // Real implementation of ThreadChecker, for use in debug mode, or | 
 | // for temporary use in release mode (e.g. to CHECK on a threading issue | 
 | // seen only in the wild). | 
 | // | 
 | // Note: You should almost always use the ThreadChecker class to get the | 
 | // right version for your build configuration. | 
 | class BASE_EXPORT ThreadCheckerImpl { | 
 |  public: | 
 |   ThreadCheckerImpl(); | 
 |   ~ThreadCheckerImpl(); | 
 |  | 
 |   bool CalledOnValidThread() const; | 
 |  | 
 |   // Changes the thread that is checked for in CalledOnValidThread.  This may | 
 |   // be useful when an object may be created on one thread and then used | 
 |   // exclusively on another thread. | 
 |   void DetachFromThread(); | 
 |  | 
 |  private: | 
 |   void EnsureThreadIdAssigned() const; | 
 |  | 
 |   mutable base::Lock lock_; | 
 |   // This is mutable so that CalledOnValidThread can set it. | 
 |   // It's guarded by |lock_|. | 
 |   mutable PlatformThreadRef valid_thread_id_; | 
 | }; | 
 |  | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_THREADING_THREAD_CHECKER_IMPL_H_ |