aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjschuh@chromium.org <jschuh@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2009-10-19 18:10:49 +0000
committerjschuh@chromium.org <jschuh@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2009-10-19 18:10:49 +0000
commit5f4fa55598baf92785223debe7d3787c6b29cf3e (patch)
tree195a50f10733db124f17faa88d90ef743aae07c7 /src
parentAllow the Breakpad Mac framework to be built without -fexceptions. (diff)
downloadbreakpad-5f4fa55598baf92785223debe7d3787c6b29cf3e.tar.xz
Issue 35001: Fallback to Thread Context on bad Exception Context
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@418 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src')
-rw-r--r--src/processor/minidump.cc9
-rw-r--r--src/processor/minidump_processor.cc6
2 files changed, 10 insertions, 5 deletions
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc
index 1a60d834..cd6da170 100644
--- a/src/processor/minidump.cc
+++ b/src/processor/minidump.cc
@@ -608,8 +608,9 @@ bool MinidumpContext::Read(u_int32_t expected_size) {
}
default: {
- // Unknown context type
- BPLOG(ERROR) << "MinidumpContext unknown context type " <<
+ // Unknown context type - Don't log as an error yet. Let the
+ // caller work that out.
+ BPLOG(INFO) << "MinidumpContext unknown context type " <<
HexString(cpu_type);
return false;
break;
@@ -2713,8 +2714,10 @@ MinidumpContext* MinidumpException::GetContext() {
scoped_ptr<MinidumpContext> context(new MinidumpContext(minidump_));
+ // Don't log as an error if we can still fall back on th thread's context
+ // (which must be possible if we got his far.)
if (!context->Read(exception_.thread_context.data_size)) {
- BPLOG(ERROR) << "MinidumpException cannot read context";
+ BPLOG(INFO) << "MinidumpException cannot read context";
return NULL;
}
diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc
index 150887fb..f22320cb 100644
--- a/src/processor/minidump_processor.cc
+++ b/src/processor/minidump_processor.cc
@@ -169,8 +169,10 @@ ProcessResult MinidumpProcessor::Process(
// of the thread's own context. For the crashed thread, the thread's
// own context is the state inside the exception handler. Using it
// would not result in the expected stack trace from the time of the
- // crash.
- context = exception->GetContext();
+ // crash. If the exception context is invalid, however, we fall back
+ // on the thread context.
+ MinidumpContext * ctx = exception->GetContext();
+ context = ctx ? ctx : thread->GetContext();
}
}