summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-03-27 12:22:44 +0000
committerDmitry Vyukov <dvyukov@google.com>2015-03-27 12:22:44 +0000
commit2034ce665ab37c98f894fcc814482521b91768ac (patch)
treef796e23b55355479987b54ce03a97fb234d57f30
parenta6e7516ad914816fcaf0865dce0c248022dd0670 (diff)
downloadbcm5719-llvm-2034ce665ab37c98f894fcc814482521b91768ac.tar.gz
bcm5719-llvm-2034ce665ab37c98f894fcc814482521b91768ac.zip
tsan: don't write to meta shadow unnecessarily
If user does malloc(1<<30), the write to meta shadow can cause excessive memory consumption. llvm-svn: 233373
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_sync.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_sync.cc b/compiler-rt/lib/tsan/rtl/tsan_sync.cc
index 49c4d15e5e9..4202d30a2e1 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_sync.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_sync.cc
@@ -88,11 +88,13 @@ bool MetaMap::FreeRange(ThreadState *thr, uptr pc, uptr p, uptr sz) {
end++;
for (; meta < end; meta++) {
u32 idx = *meta;
+ if (idx == 0) {
+ // Note: don't write to meta in this case -- the block can be huge.
+ continue;
+ }
*meta = 0;
- for (;;) {
- if (idx == 0)
- break;
- has_something = true;
+ has_something = true;
+ while (idx != 0) {
if (idx & kFlagBlock) {
block_alloc_.Free(&thr->block_cache, idx & ~kFlagMask);
break;
OpenPOWER on IntegriCloud