Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Unified Diff: src/platform/crash/crash_dumper.cc

Issue 2121012: Simplify libcrash_dumper interface and make window_manager gen crash dumps (Closed) Base URL: ssh://git@chromiumos-git//chromeos
Patch Set: Change crash dumper lib name Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/platform/crash/crash_dumper.h ('k') | src/platform/crash/crash_reporter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/platform/crash/crash_dumper.cc
diff --git a/src/platform/crash/crash_dumper.cc b/src/platform/crash/crash_dumper.cc
index 94a82636d4f527bd67bac85e804c5b1f3be5c490..0e0d2c7abec59bf0352a94696887b62b389314a4 100644
--- a/src/platform/crash/crash_dumper.cc
+++ b/src/platform/crash/crash_dumper.cc
@@ -1,16 +1,18 @@
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+//
+// Simple wrapper and basic configuration of Google breakpad. We try
+// to avoid using any unnecessary code (like libbase) to make it as
+// non-intrusive as possible to link in this library.
#include <errno.h>
#include <pwd.h>
+#include <stddef.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
-#include "base/file_path.h"
-#include "base/file_util.h"
-#include "base/logging.h"
#include "client/linux/handler/exception_handler.h"
#include "common/linux/linux_libc_support.h"
#include "common/linux/linux_syscall_support.h"
@@ -31,10 +33,17 @@ static const char *s_crash_parent_path;
static mode_t s_dump_directory_mode;
static bool s_any_crashes_occurred = false;
-static scoped_ptr<google_breakpad::ExceptionHandler> s_breakpad_handler;
+static google_breakpad::ExceptionHandler *s_breakpad_handler;
static bool s_enabled = false;
+#define CHECK_CONDITION(_cond, _message) \
+ do { if (!(_cond)) { fputs(_message, stderr); abort(); } } while(false)
+
+// This static object will cause anything that links in this object to get
+// crash handling for the duration of this file's scope.
+static CrashDumper g_crash_dumper;
+
// Prepare the crash path. Must avoid allocating memory.
static bool PrepareCrashPath() {
@@ -78,12 +87,11 @@ static bool GetEffectiveUser(std::string *result) {
}
void CrashDumper::Enable() {
- CHECK(!s_enabled) << "Crash handling already enabled";
+ CHECK_CONDITION(!s_enabled, "Crash handling already enabled");
std::string name;
- CHECK(GetEffectiveUser(&name))
- << "getpwuid_r failed - " << errno
- << " - crash reporting cannot be enabled";
+ CHECK_CONDITION(GetEffectiveUser(&name),
+ "getpwuid_r failed, cannot enable crash reporting");
if (name == kDefaultUser) {
// Crashes as "chronos" when the user is not yet logged in will
@@ -101,15 +109,15 @@ void CrashDumper::Enable() {
s_dump_directory_mode = 01777;
}
- CHECK(PrepareCrashPath()) << "Unable to create path " << s_crash_path;
+ CHECK_CONDITION(PrepareCrashPath(), "Unable to create crash path");
// Begin collecting crashes
- s_breakpad_handler.reset(new google_breakpad::ExceptionHandler(
+ s_breakpad_handler = new google_breakpad::ExceptionHandler(
s_crash_path,
FilterCallback,
NULL, // No minidump callback - sending happens asynchronously to writing
NULL, // No callback context necessary
- true)); // Install handler now.
+ true); // Install handler now.
s_enabled = true;
}
@@ -119,8 +127,9 @@ bool CrashDumper::IsEnabled() {
}
void CrashDumper::Disable() {
- CHECK(s_enabled) << "Crash handling was not enabled";
- s_breakpad_handler.reset(NULL);
+ CHECK_CONDITION(s_enabled, "Crash handling was not enabled");
+ delete s_breakpad_handler;
+ s_breakpad_handler = NULL;
s_crash_path = NULL;
s_crash_parent_path = NULL;
s_enabled = false;
« no previous file with comments | « src/platform/crash/crash_dumper.h ('k') | src/platform/crash/crash_reporter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698