// 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/compiler_specific.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 WARN_UNUSED_RESULT; // 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_