diff options
author | vladlosev <vladlosev@861a406c-534a-0410-8894-cb66d6ee9925> | 2011-10-24 21:13:56 (GMT) |
---|---|---|
committer | vladlosev <vladlosev@861a406c-534a-0410-8894-cb66d6ee9925> | 2011-10-24 21:13:56 (GMT) |
commit | 4c11f25f8c972bc5bed6d92abe2a0a3e41f499d7 (patch) | |
tree | 56ae16e703b8a380113bf2018520e22d2edd512b /include | |
parent | 97ef1c705eb24945cf4a2bca9eafe5357281703b (diff) | |
download | googletest-4c11f25f8c972bc5bed6d92abe2a0a3e41f499d7.zip googletest-4c11f25f8c972bc5bed6d92abe2a0a3e41f499d7.tar.gz googletest-4c11f25f8c972bc5bed6d92abe2a0a3e41f499d7.tar.bz2 |
Expressed the thread-safety annotations in code, replacing the existing comment-based system (by Aaron Jacobs).
Diffstat (limited to 'include')
-rw-r--r-- | include/gtest/gtest.h | 18 | ||||
-rw-r--r-- | include/gtest/internal/gtest-linked_ptr.h | 8 | ||||
-rw-r--r-- | include/gtest/internal/gtest-port.h | 4 |
3 files changed, 20 insertions, 10 deletions
diff --git a/include/gtest/gtest.h b/include/gtest/gtest.h index 432ee2d..c196990 100644 --- a/include/gtest/gtest.h +++ b/include/gtest/gtest.h @@ -1107,11 +1107,13 @@ class GTEST_API_ UnitTest { // Returns the TestCase object for the test that's currently running, // or NULL if no test is running. - const TestCase* current_test_case() const; + const TestCase* current_test_case() const + GTEST_LOCK_EXCLUDED_(mutex_); // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. - const TestInfo* current_test_info() const; + const TestInfo* current_test_info() const + GTEST_LOCK_EXCLUDED_(mutex_); // Returns the random seed used at the start of the current test run. int random_seed() const; @@ -1121,7 +1123,8 @@ class GTEST_API_ UnitTest { // value-parameterized tests and instantiate and register them. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. - internal::ParameterizedTestCaseRegistry& parameterized_test_registry(); + internal::ParameterizedTestCaseRegistry& parameterized_test_registry() + GTEST_LOCK_EXCLUDED_(mutex_); #endif // GTEST_HAS_PARAM_TEST // Gets the number of successful test cases. @@ -1194,7 +1197,8 @@ class GTEST_API_ UnitTest { const char* file_name, int line_number, const internal::String& message, - const internal::String& os_stack_trace); + const internal::String& os_stack_trace) + GTEST_LOCK_EXCLUDED_(mutex_); // Adds a TestProperty to the current TestResult object. If the result already // contains a property with the same key, the value will be updated. @@ -1227,10 +1231,12 @@ class GTEST_API_ UnitTest { // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. - void PushGTestTrace(const internal::TraceInfo& trace); + void PushGTestTrace(const internal::TraceInfo& trace) + GTEST_LOCK_EXCLUDED_(mutex_); // Pops a trace from the per-thread Google Test trace stack. - void PopGTestTrace(); + void PopGTestTrace() + GTEST_LOCK_EXCLUDED_(mutex_); // Protects mutable state in *impl_. This is mutable as some const // methods need to lock it too. diff --git a/include/gtest/internal/gtest-linked_ptr.h b/include/gtest/internal/gtest-linked_ptr.h index 57147b4..b1362cd 100644 --- a/include/gtest/internal/gtest-linked_ptr.h +++ b/include/gtest/internal/gtest-linked_ptr.h @@ -105,8 +105,8 @@ class linked_ptr_internal { // framework. // Join an existing circle. - // L < g_linked_ptr_mutex - void join(linked_ptr_internal const* ptr) { + void join(linked_ptr_internal const* ptr) + GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { MutexLock lock(&g_linked_ptr_mutex); linked_ptr_internal const* p = ptr; @@ -117,8 +117,8 @@ class linked_ptr_internal { // Leave whatever circle we're part of. Returns true if we were the // last member of the circle. Once this is done, you can join() another. - // L < g_linked_ptr_mutex - bool depart() { + bool depart() + GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { MutexLock lock(&g_linked_ptr_mutex); if (next_ == this) return true; diff --git a/include/gtest/internal/gtest-port.h b/include/gtest/internal/gtest-port.h index f3b7b62..cb870c9 100644 --- a/include/gtest/internal/gtest-port.h +++ b/include/gtest/internal/gtest-port.h @@ -1789,6 +1789,10 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. #define GTEST_DEFINE_string_(name, default_val, doc) \ GTEST_API_ ::testing::internal::String GTEST_FLAG(name) = (default_val) +// Thread annotations +#define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) +#define GTEST_LOCK_EXCLUDED_(locks) + // Parses 'str' for a 32-bit signed integer. If successful, writes the result // to *value and returns true; otherwise leaves *value unchanged and returns // false. |