TSAN finds the following data race.
WARNING: ThreadSanitizer: data race (pid=146665)
Atomic read of size 4 at 0x7fcad6b80248 by thread T5 (mutexes: write M75):
#0 __tsan_atomic32_load <null> (d8+0x8e1cd)
#1 Relaxed_Load src/base/atomicops_internals_portable.h:105:10 (libv8.so+0x8410c9)
#2 Set<v8::internal::MarkBit::AccessMode::ATOMIC> src/heap/marking.h:74 (libv8.so+0x8410c9)
#3 WhiteToGrey<v8::internal::MarkBit::AccessMode::ATOMIC> src/heap/marking.h:487 (libv8.so+0x8410c9)
#4 WhiteToGrey<v8::internal::MarkBit::AccessMode::ATOMIC> src/heap/mark-compact.h:97 (libv8.so+0x8410c9)
#5 v8::internal::ConcurrentMarkingVisitor::MarkObject(v8::internal::HeapObject*) src/heap/concurrent-marking.cc:171 (libv8.so+0x8410c9)
#6 VisitPointers src/heap/concurrent-marking.cc:64:7 (libv8.so+0x83e7db)
#7 IteratePointers<v8::internal::ConcurrentMarkingVisitor> src/objects-body-descriptors-inl.h:83 (libv8.so+0x83e7db)
#8 IterateBody<v8::internal::ConcurrentMarkingVisitor> src/objects-body-descriptors.h:124 (libv8.so+0x83e7db)
#9 v8::internal::ConcurrentMarkingVisitor::VisitFixedArray(v8::internal::Map*, v8::internal::FixedArray*) src/heap/concurrent-marking.cc:105 (libv8.so+0x83e7db)
#10 v8::internal::HeapVisitor<int, v8::internal::ConcurrentMarkingVisitor>::Visit(v8::internal::HeapObject*) src/heap/objects-visiting-inl.h:496:5 (libv8.so+0x83d790)
#11 v8::internal::ConcurrentMarking::Run() src/heap/concurrent-marking.cc:269:35 (libv8.so+0x83cec6)
#12 v8::internal::ConcurrentMarking::Task::RunInternal() src/heap/concurrent-marking.cc:230:26 (libv8.so+0x842b13)
#13 Run src/cancelable-task.h:146:7 (libv8.so+0x3260a3)
#14 non-virtual thunk to v8::internal::CancelableTask::Run() src/cancelable-task.h (libv8.so+0x3260a3)
#15 v8::platform::WorkerThread::Run() src/libplatform/worker-thread.cc:26:11 (libv8_libplatform.so+0x150d0)
#16 NotifyStartedAndRun src/base/platform/platform.h:508:5 (libv8_libbase.so+0x16782)
#17 v8::base::ThreadEntry(void*) src/base/platform/platform-posix.cc:614 (libv8_libbase.so+0x16782)
Previous write of size 8 at 0x7fcad6b80248 by main thread (mutexes: write M135):
#0 mmap64 <null> (d8+0x4b714)
#1 CommitRegion src/base/platform/platform-linux.cc:285:21 (libv8_libbase.so+0x181dd)
#2 v8::base::VirtualMemory::Commit(void*, unsigned long, bool) src/base/platform/platform-linux.cc:256 (libv8_libbase.so+0x181dd)
#3 v8::internal::MemoryAllocator::AllocateAlignedMemory(unsigned long, unsigned long, unsigned long, v8::internal::Executability, v8::base::VirtualMemory*) src/heap/spaces.cc:488:21 (libv8.so+0x909c6a)
#4 v8::internal::MemoryAllocator::AllocateChunk(unsigned long, unsigned long, v8::internal::Executability, v8::internal::Space*) src/heap/spaces.cc:745:9 (libv8.so+0x906756)
#5 AllocatePage<v8::internal::MemoryAllocator::AllocationMode::kRegular, v8::internal::PagedSpace> src/heap/spaces.cc:981:13 (libv8.so+0x90da0b)
#6 v8::internal::PagedSpace::Expand() src/heap/spaces.cc:1433 (libv8.so+0x90da0b)
#7 v8::internal::PagedSpace::RawSlowAllocateRaw(int) src/heap/spaces.cc:3017:62 (libv8.so+0x918981)
#8 v8::internal::PagedSpace::SlowAllocateRaw(int) src/heap/spaces.cc:2967:10 (libv8.so+0x9185bf)
#9 v8::internal::PagedSpace::AllocateRawUnaligned(int, v8::internal::PagedSpace::UpdateSkipList) src/heap/spaces-inl.h:417:16 (libv8.so+0x801ed0)
#10 AllocateRaw src/heap/spaces-inl.h:494:29 (libv8.so+0x801dd8)
#11 v8::internal::Heap::AllocateRaw(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) src/heap/heap-inl.h:331 (libv8.so+0x801dd8)
#12 v8::internal::Heap::AllocateRawOneByteString(int, v8::internal::PretenureFlag) src/heap/heap.cc:3786:35 (libv8.so+0x868a93)
#13 v8::internal::Factory::NewRawOneByteString(int, v8::internal::PretenureFlag) src/factory.cc:550:3 (libv8.so+0x7df408)
#14 NewStringFromOneByte src/factory.cc:317:3 (libv8.so+0x7fe3ca)
#15 NewStringFromAsciiChecked src/factory.h:176 (libv8.so+0x7fe3ca)
#16 v8::internal::Factory::NumberToString(v8::internal::Handle<v8::internal::Object>, bool) src/factory.cc:2593 (libv8.so+0x7fe3ca)
#17 __RT_impl_Runtime_NumberToString src/runtime/runtime-numbers.cc:92:31 (libv8.so+0xc5ac4d)
#18 v8::internal::Runtime_NumberToString(int, v8::internal::Object**, v8::internal::Isolate*) src/runtime/runtime-numbers.cc:87 (libv8.so+0xc5ac4d)
#19 <null> <null> (0x7fcad988463d)
#20 CallInternal src/execution.cc:181:10 (libv8.so+0x7cb1de)
#21 v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*) src/execution.cc:191 (libv8.so+0x7cb1de)
#22 v8::Script::Run(v8::Local<v8::Context>) src/api.cc:2057:7 (libv8.so+0x1c24d8)
#23 v8::Shell::ExecuteString(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::Value>, bool, bool) src/d8.cc:574:28 (d8+0xb2be0)
#24 v8::SourceGroup::Execute(v8::Isolate*) src/d8.cc:2327:10 (d8+0xbcb64)
#25 v8::Shell::RunMain(v8::Isolate*, int, char**, bool) src/d8.cc:2757:34 (d8+0xbfa43)
#26 v8::Shell::Main(int, char**) src/d8.cc:3207:16 (d8+0xc16ef)
#27 main src/d8.cc:3239:10 (d8+0xc180e)
Mutex M75 (0x7ba8000016e0) created at:
#0 pthread_mutex_init <null> (d8+0x4d423)
#1 InitializeNativeHandle src/base/platform/mutex.cc:28:12 (libv8_libbase.so+0x13ecb)
#2 v8::base::Mutex::Mutex() src/base/platform/mutex.cc:81 (libv8_libbase.so+0x13ecb)
#3 v8::internal::Heap::Heap() src/heap/heap.cc:80:7 (libv8.so+0x84af14)
#4 v8::internal::Isolate::Isolate(bool) src/isolate.cc:2284:10 (libv8.so+0x99489a)
#5 v8::Isolate::New(v8::Isolate::CreateParams const&) src/api.cc:8324:29 (libv8.so+0x2073c9)
#6 v8::Shell::Main(int, char**) src/d8.cc:3157:22 (d8+0xc0df2)
#7 main src/d8.cc:3239:10 (d8+0xc180e)
Mutex M135 (0x7b5800000260) created at:
#0 pthread_mutex_init <null> (d8+0x4d423)
#1 InitializeNativeHandle src/base/platform/mutex.cc:28:12 (libv8_libbase.so+0x13ecb)
#2 v8::base::Mutex::Mutex() src/base/platform/mutex.cc:81 (libv8_libbase.so+0x13ecb)
#3 v8::internal::PagedSpace::PagedSpace(v8::internal::Heap*, v8::internal::AllocationSpace, v8::internal::Executability) src/heap/spaces.cc:1266:13 (libv8.so+0x90c1ee)
#4 OldSpace src/heap/spaces.h:2817:9 (libv8.so+0x86eb30)
#5 v8::internal::Heap::SetUp() src/heap/heap.cc:5682 (libv8.so+0x86eb30)
#6 v8::internal::Isolate::Init(v8::internal::Deserializer*) src/isolate.cc:2734:14 (libv8.so+0x997ae6)
#7 v8::internal::Snapshot::Initialize(v8::internal::Isolate*) src/snapshot/snapshot-common.cc:44:27 (libv8.so+0xd01463)
#8 v8::IsolateNewImpl(v8::internal::Isolate*, v8::Isolate::CreateParams const&) src/api.cc:8378:29 (libv8.so+0x2076dd)
#9 v8::Isolate::New(v8::Isolate::CreateParams const&) src/api.cc:8325:10 (libv8.so+0x2073d4)
#10 v8::Shell::Main(int, char**) src/d8.cc:3157:22 (d8+0xc0df2)
#11 main src/d8.cc:3239:10 (d8+0xc180e)
Thread T5 'V8 WorkerThread' (tid=146875, running) created by main thread at:
#0 pthread_create <null> (d8+0x4c3a3)
#1 v8::base::Thread::Start() src/base/platform/platform-posix.cc:647:14 (libv8_libbase.so+0x166d9)
#2 v8::platform::WorkerThread::WorkerThread(v8::platform::TaskQueue*) src/libplatform/worker-thread.cc:15:3 (libv8_libplatform.so+0x14fc4)
#3 v8::platform::DefaultPlatform::EnsureInitialized() src/libplatform/default-platform.cc:128:32 (libv8_libplatform.so+0x6b88)
#4 v8::platform::CreateDefaultPlatform(int, v8::platform::IdleTaskSupport, v8::platform::InProcessStackDumping) src/libplatform/default-platform.cc:40:13 (libv8_libplatform.so+0x6a56)
#5 v8::Shell::Main(int, char**) src/d8.cc:3097:16 (d8+0xc098e)
#6 main src/d8.cc:3239:10 (d8+0xc180e)
Comment 1 by u...@chromium.org
, Jul 24 2017