Index: base/test/scoped_mock_log.cc |
diff --git a/net/test/scoped_mock_log.cc b/base/test/scoped_mock_log.cc |
similarity index 69% |
rename from net/test/scoped_mock_log.cc |
rename to base/test/scoped_mock_log.cc |
index 3bc99cb3d42b005e91af466f10224cd018c080d5..caaa47ede75fe6f0d23e935f3f3a47db0c4ac1f6 100644 |
--- a/net/test/scoped_mock_log.cc |
+++ b/base/test/scoped_mock_log.cc |
@@ -2,17 +2,16 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "net/test/scoped_mock_log.h" |
+#include "base/test/scoped_mock_log.h" |
-#include "base/logging.h" |
- |
-namespace net { |
-namespace test { |
+namespace base { |
// static |
-ScopedMockLog* ScopedMockLog::g_instance_ = NULL; |
+ScopedMockLog* ScopedMockLog::g_instance_ = nullptr; |
+Lock ScopedMockLog::g_lock; |
-ScopedMockLog::ScopedMockLog() : is_capturing_logs_(false) {} |
+ScopedMockLog::ScopedMockLog() : is_capturing_logs_(false) { |
+} |
ScopedMockLog::~ScopedMockLog() { |
if (is_capturing_logs_) { |
@@ -21,6 +20,8 @@ ScopedMockLog::~ScopedMockLog() { |
} |
void ScopedMockLog::StartCapturingLogs() { |
+ AutoLock scoped_lock(g_lock); |
+ |
// We don't use CHECK(), which can generate a new LOG message, and |
// thus can confuse ScopedMockLog objects or other registered |
// LogSinks. |
@@ -34,6 +35,8 @@ void ScopedMockLog::StartCapturingLogs() { |
} |
void ScopedMockLog::StopCapturingLogs() { |
+ AutoLock scoped_lock(g_lock); |
+ |
// We don't use CHECK(), which can generate a new LOG message, and |
// thus can confuse ScopedMockLog objects or other registered |
// LogSinks. |
@@ -42,7 +45,7 @@ void ScopedMockLog::StopCapturingLogs() { |
is_capturing_logs_ = false; |
logging::SetLogMessageHandler(previous_handler_); |
- g_instance_ = NULL; |
+ g_instance_ = nullptr; |
} |
// static |
@@ -51,8 +54,13 @@ bool ScopedMockLog::LogMessageHandler(int severity, |
int line, |
size_t message_start, |
const std::string& str) { |
+ // gMock guarantees thread-safety for calling a mocked method |
+ // (https://code.google.com/p/googlemock/wiki/CookBook#Using_Google_Mock_and_Threads) |
+ // but we also need to make sure that Start/StopCapturingLogs are synchronized |
+ // with LogMessageHandler. |
+ AutoLock scoped_lock(g_lock); |
+ |
return g_instance_->Log(severity, file, line, message_start, str); |
} |
-} // namespace test |
-} // namespace net |
+} // namespace base |