tsan: fix windows Go support
authorDmitry Vyukov <dvyukov@google.com>
Wed, 27 Apr 2016 14:03:14 +0000 (14:03 +0000)
committerDmitry Vyukov <dvyukov@google.com>
Wed, 27 Apr 2016 14:03:14 +0000 (14:03 +0000)
Unmap can't unmap arbitrary regions on windows.

llvm-svn: 267716

compiler-rt/lib/tsan/rtl/tsan_sync.cc

index c58821a..15759d4 100644 (file)
@@ -120,6 +120,12 @@ bool MetaMap::FreeRange(Processor *proc, uptr p, uptr sz) {
 // without meta objects, at this point it stops freeing meta objects. Because
 // thread stacks grow top-down, we do the same starting from end as well.
 void MetaMap::ResetRange(Processor *proc, uptr p, uptr sz) {
+  if (kGoMode) {
+    // UnmapOrDie/MmapFixedNoReserve does not work on Windows,
+    // so we do the optimization only for C/C++.
+    FreeRange(proc, p, sz);
+    return;
+  }
   const uptr kMetaRatio = kMetaShadowCell / kMetaShadowSize;
   const uptr kPageSize = GetPageSizeCached() * kMetaRatio;
   if (sz <= 4 * kPageSize) {