Commit 6cb26aea authored by Lucas Gadani's avatar Lucas Gadani Committed by Commit Bot

Split OOM errors from other errors when failing to create threads.

Also record a crash key with the error so it's easier to debug.

Bug: 881099
Change-Id: I79e44c0331fcb0a7924cb86efc88f72ece73be82
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1731669
Commit-Queue: Lucas Gadani <lfg@chromium.org>
Reviewed-by: default avatarGabriel Charette <gab@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683694}
parent b75db7f4
...@@ -8,10 +8,13 @@ ...@@ -8,10 +8,13 @@
#include "base/debug/activity_tracker.h" #include "base/debug/activity_tracker.h"
#include "base/debug/alias.h" #include "base/debug/alias.h"
#include "base/debug/crash_logging.h"
#include "base/debug/dump_without_crashing.h" #include "base/debug/dump_without_crashing.h"
#include "base/debug/profiler.h" #include "base/debug/profiler.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/process/memory.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/threading/scoped_blocking_call.h" #include "base/threading/scoped_blocking_call.h"
#include "base/threading/thread_id_name_manager.h" #include "base/threading/thread_id_name_manager.h"
...@@ -149,8 +152,23 @@ bool CreateThreadInternal(size_t stack_size, ...@@ -149,8 +152,23 @@ bool CreateThreadInternal(size_t stack_size,
if (!thread_handle) { if (!thread_handle) {
DWORD last_error = ::GetLastError(); DWORD last_error = ::GetLastError();
base::debug::Alias(&last_error);
base::debug::DumpWithoutCrashing(); switch (last_error) {
case ERROR_NOT_ENOUGH_MEMORY:
case ERROR_OUTOFMEMORY:
case ERROR_COMMITMENT_LIMIT:
TerminateBecauseOutOfMemory(stack_size);
break;
default:
static auto* last_error_crash_key = debug::AllocateCrashKeyString(
"create_thread_last_error", debug::CrashKeySize::Size32);
debug::SetCrashKeyString(last_error_crash_key,
base::NumberToString(last_error));
debug::Alias(&last_error);
debug::DumpWithoutCrashing();
break;
}
delete params; delete params;
return false; return false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment