Index: components/crash/content/app/crashpad.cc |
diff --git a/components/crash/content/app/crashpad.cc b/components/crash/content/app/crashpad.cc |
index a0eabba349246f0540a88cf0a5b260f1b3e65c04..494131acb3a54d93e61660a3cc026cb24f449990 100644 |
--- a/components/crash/content/app/crashpad.cc |
+++ b/components/crash/content/app/crashpad.cc |
@@ -52,14 +52,22 @@ void ClearCrashKey(const base::StringPiece& key) { |
g_simple_string_dictionary->RemoveKey(key.data()); |
} |
-bool LogMessageHandler(int severity, |
- const char* file, |
- int line, |
- size_t message_start, |
- const std::string& string) { |
+class LogMessageListener : logging::LogMessageListener { |
+ void OnMessage(int severity, |
+ const char* file, |
+ int line, |
+ size_t message_start, |
+ const std::string& string) override; |
+}; |
+ |
+void LogMessageListener::OnMessage(int severity, |
+ const char* file, |
+ int line, |
+ size_t message_start, |
+ const std::string& string) { |
// Only handle FATAL. |
if (severity != logging::LOG_FATAL) { |
- return false; |
+ return; |
} |
// In case of an out-of-memory condition, this code could be reentered when |
@@ -68,7 +76,7 @@ bool LogMessageHandler(int severity, |
// should work. |
static bool guarded = false; |
if (guarded) { |
- return false; |
+ return; |
} |
base::AutoReset<bool> guard(&guarded, true); |
@@ -87,7 +95,6 @@ bool LogMessageHandler(int severity, |
// Rather than including the code to force the crash here, allow the caller to |
// do it. |
- return false; |
} |
void DumpWithoutCrashing() { |
@@ -164,7 +171,8 @@ void InitializeCrashpadImpl(bool initial_client, |
SetCrashKeyValue("pid", base::IntToString(::GetCurrentProcessId())); |
#endif |
- logging::SetLogMessageHandler(LogMessageHandler); |
+ // Intentionally leak the listener. |
+ new LogMessageListener(); |
// If clients called CRASHPAD_SIMULATE_CRASH() instead of |
// base::debug::DumpWithoutCrashing(), these dumps would appear as crashes in |