Commit 0a0e4fdd authored by cjhopman's avatar cjhopman Committed by Commit bot

Initialize Android CrashDumpManager earlier

The CrashDumpManagerAndroid instance must be initialized before any
child process is created. This change moves the initialization to
PreThreadsCreate, which at the very least should be before the
PROCESS_LAUNCHER thread (where the potentially evil child processes will
be created). #nocrashes

BUG=439322

Review URL: https://codereview.chromium.org/889083002

Cr-Commit-Position: refs/heads/master@{#314083}
parent 60b430a1
......@@ -29,8 +29,13 @@ ChromeBrowserMainPartsAndroid::ChromeBrowserMainPartsAndroid(
ChromeBrowserMainPartsAndroid::~ChromeBrowserMainPartsAndroid() {
}
void ChromeBrowserMainPartsAndroid::PreProfileInit() {
TRACE_EVENT0("startup", "ChromeBrowserMainPartsAndroid::PreProfileInit")
int ChromeBrowserMainPartsAndroid::PreCreateThreads() {
TRACE_EVENT0("startup", "ChromeBrowserMainPartsAndroid::PreCreateThreads")
// The CrashDumpManager must be initialized before any child process is
// created (as they need to access it during creation). Such processes
// are created on the PROCESS_LAUNCHER thread, and so the manager is
// initialized before that thread is created.
#if defined(GOOGLE_CHROME_BUILD)
// TODO(jcivelli): we should not initialize the crash-reporter when it was not
// enabled. Right now if it is disabled we still generate the minidumps but we
......@@ -51,7 +56,7 @@ void ChromeBrowserMainPartsAndroid::PreProfileInit() {
crash_dump_manager_.reset(new breakpad::CrashDumpManager(crash_dump_dir));
}
ChromeBrowserMainParts::PreProfileInit();
return ChromeBrowserMainParts::PreCreateThreads();
}
void ChromeBrowserMainPartsAndroid::PostProfileInit() {
......
......@@ -20,7 +20,7 @@ class ChromeBrowserMainPartsAndroid : public ChromeBrowserMainParts {
virtual ~ChromeBrowserMainPartsAndroid();
// content::BrowserMainParts overrides.
virtual void PreProfileInit() override;
virtual int PreCreateThreads() override;
virtual void PostProfileInit() override;
virtual void PreEarlyInitialization() override;
......
......@@ -29,6 +29,7 @@ CrashDumpManager* CrashDumpManager::instance_ = NULL;
// static
CrashDumpManager* CrashDumpManager::GetInstance() {
CHECK(instance_);
return instance_;
}
......@@ -83,6 +84,7 @@ base::File CrashDumpManager::CreateMinidumpFile(int child_process_id) {
void CrashDumpManager::ProcessMinidump(const base::FilePath& minidump_path,
base::ProcessHandle pid) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
CHECK(instance_);
int64 file_size = 0;
int r = base::GetFileSize(minidump_path, &file_size);
DCHECK(r) << "Failed to retrieve size for minidump "
......
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