diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2012-11-22 08:42:01 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2012-11-22 08:42:01 +0000 |
commit | 35437032be8df1f33594ea35101e8bcfb2429e92 (patch) | |
tree | 33c91b5645f59ba12f478cd6f1743179f80dad52 | |
parent | 68ab5ecd757c6e61593fc73adcd7e7e5e3dbef86 (diff) | |
download | bcm5719-llvm-35437032be8df1f33594ea35101e8bcfb2429e92.tar.gz bcm5719-llvm-35437032be8df1f33594ea35101e8bcfb2429e92.zip |
tsan: better error message for OOM
llvm-svn: 168491
-rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h | 7 | ||||
-rw-r--r-- | compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h index d0341ad6ead..a537ff0c46a 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h @@ -277,7 +277,12 @@ class SizeClassAllocator64 { } while (idx < end_idx); region->allocated_user += idx - beg_idx; region->allocated_meta += i * kMetadataSize; - CHECK_LT(region->allocated_user + region->allocated_meta, kRegionSize); + if (region->allocated_user + region->allocated_meta > kRegionSize) { + Printf("Out of memory. Dying.\n"); + Printf("The process has exhausted %zuMB for size class %zu.\n", + kRegionSize / 1024 / 1024, size); + Die(); + } } void *AllocateBySizeClass(uptr class_id) { diff --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc b/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc index bf7684867f7..2d97d3ab2ad 100644 --- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc +++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc @@ -136,7 +136,7 @@ void FailInAssertionOnOOM() { TEST(SanitizerCommon, SizeClassAllocator64Overflow) { EXPECT_DEATH(FailInAssertionOnOOM(), - "allocated_user.*allocated_meta.*kRegionSize"); + "Out of memory"); } TEST(SanitizerCommon, LargeMmapAllocator) { |