diff options
author | ted.mielczarek@gmail.com <ted.mielczarek@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2013-04-16 17:55:21 +0000 |
---|---|---|
committer | ted.mielczarek@gmail.com <ted.mielczarek@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2013-04-16 17:55:21 +0000 |
commit | 91c9518af26cbafc540d58d4c3d106b580171a2a (patch) | |
tree | 284de3f173d9f23bc8f7445ab848d3eb8b13683d | |
parent | ESP is zero in dumps created by CrashGenerationClient::RequestDump on i386 Linux (diff) | |
download | breakpad-91c9518af26cbafc540d58d4c3d106b580171a2a.tar.xz |
Don't print an error when a user-set max frames limit has been reached in the stackwalker
Patch by Julian Seward <jseward@acm.org>, R=ted at https://bugzilla.mozilla.org/show_bug.cgi?id=859745
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1150 4c0a9323-5329-0410-9bdc-e9ce6186880e
-rw-r--r-- | src/google_breakpad/processor/stackwalker.h | 10 | ||||
-rw-r--r-- | src/processor/stackwalker.cc | 6 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/google_breakpad/processor/stackwalker.h b/src/google_breakpad/processor/stackwalker.h index f09291fe..3640cc73 100644 --- a/src/google_breakpad/processor/stackwalker.h +++ b/src/google_breakpad/processor/stackwalker.h @@ -88,7 +88,10 @@ class Stackwalker { const CodeModules* modules, StackFrameSymbolizer* resolver_helper); - static void set_max_frames(uint32_t max_frames) { max_frames_ = max_frames; } + static void set_max_frames(uint32_t max_frames) { + max_frames_ = max_frames; + max_frames_set_ = true; + } static uint32_t max_frames() { return max_frames_; } protected: @@ -196,6 +199,11 @@ class Stackwalker { // The maximum number of frames Stackwalker will walk through. // This defaults to 1024 to prevent infinite loops. static uint32_t max_frames_; + + // Keep track of whether max_frames_ has been set by the user, since + // it affects whether or not an error message is printed in the case + // where an unwind got stopped by the limit. + static bool max_frames_set_; }; } // namespace google_breakpad diff --git a/src/processor/stackwalker.cc b/src/processor/stackwalker.cc index 076f2e5f..fff3392d 100644 --- a/src/processor/stackwalker.cc +++ b/src/processor/stackwalker.cc @@ -58,6 +58,7 @@ namespace google_breakpad { const int Stackwalker::kRASearchWords = 30; uint32_t Stackwalker::max_frames_ = 1024; +bool Stackwalker::max_frames_set_ = false; Stackwalker::Stackwalker(const SystemInfo* system_info, MemoryRegion* memory, @@ -126,7 +127,10 @@ bool Stackwalker::Walk(CallStack* stack, // over the frame, because the stack now owns it. stack->frames_.push_back(frame.release()); if (stack->frames_.size() > max_frames_) { - BPLOG(ERROR) << "The stack is over " << max_frames_ << " frames."; + // Only emit an error message in the case where the limit + // reached is the default limit, not set by the user. + if (!max_frames_set_) + BPLOG(ERROR) << "The stack is over " << max_frames_ << " frames."; break; } |