aboutsummaryrefslogtreecommitdiff
path: root/libsanitizer/tsan/tsan_sync.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libsanitizer/tsan/tsan_sync.cc')
-rw-r--r--libsanitizer/tsan/tsan_sync.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/libsanitizer/tsan/tsan_sync.cc b/libsanitizer/tsan/tsan_sync.cc
index 04fef61..0c5be10 100644
--- a/libsanitizer/tsan/tsan_sync.cc
+++ b/libsanitizer/tsan/tsan_sync.cc
@@ -263,6 +263,11 @@ void StackTrace::ObtainCurrent(ThreadState *thr, uptr toppc) {
n_ = c_ - !!toppc;
}
} else {
+ // Cap potentially huge stacks.
+ if (n_ + !!toppc > kTraceStackSize) {
+ start = n_ - kTraceStackSize + !!toppc;
+ n_ = kTraceStackSize - !!toppc;
+ }
s_ = (uptr*)internal_alloc(MBlockStackTrace,
(n_ + !!toppc) * sizeof(s_[0]));
}