|
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 #ifndef BASE_THREADING_THREAD_CHECKER_IMPL_H_ |
|
6 #define BASE_THREADING_THREAD_CHECKER_IMPL_H_ |
|
7 |
|
8 #include "base/base_export.h" |
|
9 #include "base/synchronization/lock.h" |
|
10 #include "base/threading/platform_thread.h" |
|
11 |
|
12 namespace base { |
|
13 |
|
14 // Real implementation of ThreadChecker, for use in debug mode, or |
|
15 // for temporary use in release mode (e.g. to CHECK on a threading issue |
|
16 // seen only in the wild). |
|
17 // |
|
18 // Note: You should almost always use the ThreadChecker class to get the |
|
19 // right version for your build configuration. |
|
20 class BASE_EXPORT ThreadCheckerImpl { |
|
21 public: |
|
22 ThreadCheckerImpl(); |
|
23 ~ThreadCheckerImpl(); |
|
24 |
|
25 bool CalledOnValidThread() const; |
|
26 |
|
27 // Changes the thread that is checked for in CalledOnValidThread. This may |
|
28 // be useful when an object may be created on one thread and then used |
|
29 // exclusively on another thread. |
|
30 void DetachFromThread(); |
|
31 |
|
32 private: |
|
33 void EnsureThreadIdAssigned() const; |
|
34 |
|
35 mutable base::Lock lock_; |
|
36 // This is mutable so that CalledOnValidThread can set it. |
|
37 // It's guarded by |lock_|. |
|
38 mutable PlatformThreadId valid_thread_id_; |
|
39 }; |
|
40 |
|
41 } // namespace base |
|
42 |
|
43 #endif // BASE_THREADING_THREAD_CHECKER_IMPL_H_ |