diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2015-03-12 12:48:19 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2015-03-12 12:48:19 +0000 |
commit | 374bd283863aa41ae3c25fabe41c83b6cd480f43 (patch) | |
tree | d08429a116b755cded2c7a4428e9c373a09fbdec /lib/tsan/rtl/tsan_sync.cc | |
parent | d4b4e020b0e178677f2d3310cc3ea1c502cbba73 (diff) |
tsan: fix a bug in MetaMap::ResetRange
The bug was uncovered by NegativeTests.MmapTest from
data-race-test suite, so port it as well.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@232032 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/tsan/rtl/tsan_sync.cc')
-rw-r--r-- | lib/tsan/rtl/tsan_sync.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/tsan/rtl/tsan_sync.cc b/lib/tsan/rtl/tsan_sync.cc index 3d2463353..49c4d15e5 100644 --- a/lib/tsan/rtl/tsan_sync.cc +++ b/lib/tsan/rtl/tsan_sync.cc @@ -162,8 +162,10 @@ void MetaMap::ResetRange(ThreadState *thr, uptr pc, uptr p, uptr sz) { // freed). Note: we can't simply madvise, because we need to leave a zeroed // range (otherwise __tsan_java_move can crash if it encounters a left-over // meta objects in java heap). - UnmapOrDie((void*)p0, sz0); - MmapFixedNoReserve(p0, sz0); + uptr metap = (uptr)MemToMeta(p0); + uptr metasz = sz0 / kMetaRatio; + UnmapOrDie((void*)metap, metasz); + MmapFixedNoReserve(metap, metasz); } MBlock* MetaMap::GetBlock(uptr p) { |