| // Copyright (c) 2012 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_NON_THREAD_SAFE_IMPL_H_ |
| #define BASE_THREADING_NON_THREAD_SAFE_IMPL_H_ |
| |
| #include "base/base_export.h" |
| #include "base/threading/thread_checker_impl.h" |
| |
| namespace base { |
| |
| // Full implementation of NonThreadSafe, for debug mode or for occasional |
| // temporary use in release mode e.g. when you need to CHECK on a thread |
| // bug that only occurs in the wild. |
| // |
| // Note: You should almost always use the NonThreadSafe class to get |
| // the right version of the class for your build configuration. |
| class BASE_EXPORT NonThreadSafeImpl { |
| public: |
| bool CalledOnValidThread() const; |
| |
| protected: |
| ~NonThreadSafeImpl(); |
| |
| // Changes the thread that is checked for in CalledOnValidThread. The next |
| // call to CalledOnValidThread will attach this class to a new thread. It is |
| // up to the NonThreadSafe derived class to decide to expose this or not. |
| // This may be useful when an object may be created on one thread and then |
| // used exclusively on another thread. |
| void DetachFromThread(); |
| |
| private: |
| ThreadCheckerImpl thread_checker_; |
| }; |
| |
| } // namespace base |
| |
| #endif // BASE_THREADING_NON_THREAD_SAFE_IMPL_H_ |