sdk icon indicating copy to clipboard operation
sdk copied to clipboard

TSAN reported data race between marker and object allocation

Open alexmarkov opened this issue 1 year ago • 0 comments

From iso-stress-linux bot:

[/b/s/w/ir/cache/builder/sdk/runtime/tests/concurrency/../../../tests/lib/async/timer_repeat_test.dart] finished
[/b/s/w/ir/cache/builder/sdk/runtime/tests/concurrency/../../../tests/lib/async/timer_repeat_test.dart] finished
[/b/s/w/ir/cache/builder/sdk/runtime/tests/concurrency/../../../tests/lib/async/timer_repeat_test.dart] finished
[/b/s/w/ir/cache/builder/sdk/runtime/tests/concurrency/../../../tests/lib/async/timer_repeat_test.dart] finished
==================
WARNING: ThreadSanitizer: data race (pid=542132)
  Atomic write of size 8 at 0x7f937d7004d8 by thread T19:
    #0 unsigned long std::_LIBCPP_ABI_NAMESPACE::__cxx_atomic_fetch_and[abi:v15000]<unsigned long>(std::_LIBCPP_ABI_NAMESPACE::__cxx_atomic_base_impl<unsigned long>*, unsigned long, std::_LIBCPP_ABI_NAMESPACE::memory_order) out/ReleaseTSANX64/../../third_party/libcxx/include/atomic:1052:12 (dart+0x27a3042)
    #1 std::_LIBCPP_ABI_NAMESPACE::__atomic_base<unsigned long, true>::fetch_and[abi:v15000](unsigned long, std::_LIBCPP_ABI_NAMESPACE::memory_order) out/ReleaseTSANX64/../../third_party/libcxx/include/atomic:1699:17 (dart+0x27a3042)
    #2 bool dart::AtomicBitFieldContainer<unsigned long>::TryClear<dart::UntaggedObject::NotMarkedBit>() out/ReleaseTSANX64/../../runtime/vm/bitfield.h:118:26 (dart+0x27a3042)
    #3 dart::UntaggedObject::TryAcquireMarkBit() out/ReleaseTSANX64/../../runtime/vm/raw_object.h:307:43 (dart+0x27a3042)
    #4 dart::MarkingVisitorBase<true>::TryAcquireMarkBit(dart::ObjectPtr) out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:483:28 (dart+0x27a3042)
    #5 dart::MarkingVisitorBase<true>::MarkObject(dart::ObjectPtr) out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:494:11 (dart+0x27a3042)
    #6 dart::MarkingVisitorBase<true>::VisitPointers(dart::ObjectPtr*, dart::ObjectPtr*) out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:258:7 (dart+0x27a3042)
    #7 dart::ObjectPointerVisitor::VisitCompressedPointers(unsigned long, dart::ObjectPtr*, dart::ObjectPtr*) out/ReleaseTSANX64/../../runtime/vm/visitor.h:46:5 (dart+0x279fabd)
    #8 long dart::UntaggedObject::VisitPointersNonvirtual<dart::MarkingVisitorBase<true>>(dart::MarkingVisitorBase<true>*) out/ReleaseTSANX64/../../runtime/vm/raw_object.h:467:19 (dart+0x279fabd)
    #9 dart::MarkingVisitorBase<true>::ProcessMarkingStack(long) out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:221:32 (dart+0x279fabd)
    #10 dart::GCMarker::IncrementalMarkWithSizeBudget(dart::PageSpace*, long) out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:1079:11 (dart+0x279f54f)
    #11 dart::PageSpace::IncrementalMarkWithSizeBudget(long) out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:892:14 (dart+0x27ab218)
    #12 dart::Heap::CheckConcurrentMarking(dart::Thread*, dart::GCReason, long) out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:597:20 (dart+0x2798f7b)
    #13 dart::PageSpace::TryAllocateInFreshLargePage(long, bool, dart::PageSpace::GrowthPolicy) out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:371:12 (dart+0x27a8388)
    #14 dart::PageSpace::TryAllocateInternal(long, dart::FreeList*, bool, dart::PageSpace::GrowthPolicy, bool, bool) out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:419:14 (dart+0x27a85bb)
    #15 dart::PageSpace::TryAllocate(long, bool, dart::PageSpace::GrowthPolicy) out/ReleaseTSANX64/../../runtime/vm/heap/pages.h:146:12 (dart+0x27980d0)
    #16 dart::Heap::AllocateOld(dart::Thread*, long, bool) out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:120:29 (dart+0x27980d0)
    #17 dart::Heap::Allocate(dart::Thread*, long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/heap/heap.h (dart+0x25923dd)
    #18 dart::Object::Allocate(long, long, dart::Heap::Space, bool, unsigned long, unsigned long) out/ReleaseTSANX64/../../runtime/vm/object.cc:2849:25 (dart+0x25b6b08)
    #19 dart::Array::ObjectPtrType dart::Object::AllocateVariant<dart::Array>(long, dart::Heap::Space, long) out/ReleaseTSANX64/../../runtime/vm/object.h:749:9 (dart+0x26228b3)
    #20 dart::Array::NewUninitialized(long, long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/object.cc:25184:14 (dart+0x26228b3)
    #21 dart::Array::New(long, long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/object.cc:25201:37 (dart+0x26228b3)
    #22 dart::Array::New(long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/object.h:11100:12 (dart+0x2705f00)
    #23 dart::DRT_HelperAllocateArray(dart::Isolate*, dart::Thread*, dart::Zone*, dart::NativeArguments) out/ReleaseTSANX64/../../runtime/vm/runtime_entry.cc:375:7 (dart+0x2705f00)
    #24 dart::DRT_AllocateArray(dart::NativeArguments) out/ReleaseTSANX64/../../runtime/vm/runtime_entry.cc:353:1 (dart+0x2705f00)
    #25 <null> <null> (0x7f939c782b4a)
    #26 dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:37:10 (dart+0x24fd2b1)
    #27 dart::DartLibraryCalls::HandleMessage(long, dart::Instance const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:718:28 (dart+0x24fd2b1)
    #28 dart::IsolateMessageHandler::HandleMessage(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<dart::Message, std::_LIBCPP_ABI_NAMESPACE::default_delete<dart::Message>>) out/ReleaseTSANX64/../../runtime/vm/isolate.cc:1397:15 (dart+0x2533d00)
    #29 dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool) out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:238:16 (dart+0x25748df)
    #30 dart::MessageHandler::TaskCallback() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:457:18 (dart+0x25752d0)
    #31 dart::MessageHandlerTask::Run() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:31:15 (dart+0x2575a73)
    #32 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158:15 (dart+0x276529e)
    #33 dart::ThreadPool::Worker::Main(unsigned long) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:330:9 (dart+0x27657a7)
    #34 dart::ThreadStart(void*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:154:5 (dart+0x2687a23)

  Previous write of size 8 at 0x7f937d7004d8 by thread T18 (mutexes: write M0):
    #0 mmap64 ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/../../sanitizer_common/sanitizer_common_interceptors.inc:7517:3 (dart+0x21d3f94)
    #1 dart::Map(void*, unsigned long, int, int, int, long) out/ReleaseTSANX64/../../runtime/vm/virtual_memory_posix.cc:62:18 (dart+0x277daac)
    #2 dart::GenericMapAligned(void*, int, long, long, long, int) out/ReleaseTSANX64/../../runtime/vm/virtual_memory_posix.cc:96:19 (dart+0x277daac)
    #3 dart::VirtualMemory::AllocateAligned(long, long, bool, bool, char const*) out/ReleaseTSANX64/../../runtime/vm/virtual_memory_posix.cc (dart+0x277d9df)
    #4 dart::Page::Allocate(long, unsigned long) out/ReleaseTSANX64/../../runtime/vm/heap/page.cc:81:14 (dart+0x27a641a)
    #5 dart::SemiSpace::TryAllocatePageLocked(bool) out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:729:16 (dart+0x27b6787)
    #6 dart::Scavenger::TryAllocateNewTLAB(dart::Thread*, long, bool) out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:1669:21 (dart+0x27b6787)
    #7 dart::Scavenger::TryAllocate(dart::Thread*, long) out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.h:143:5 (dart+0x2797b43)
    #8 dart::Heap::AllocateNew(dart::Thread*, long) out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:81:27 (dart+0x2797b43)
    #9 dart::Heap::Allocate(dart::Thread*, long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/heap/heap.h:73:16 (dart+0x25923bb)
    #10 dart::Object::Allocate(long, long, dart::Heap::Space, bool, unsigned long, unsigned long) out/ReleaseTSANX64/../../runtime/vm/object.cc:2849:25 (dart+0x25b6b08)
    #11 dart::Array::ObjectPtrType dart::Object::AllocateVariant<dart::Array>(long, dart::Heap::Space, long) out/ReleaseTSANX64/../../runtime/vm/object.h:749:9 (dart+0x2622b20)
    #12 dart::Array::NewUninitialized(long, long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/object.cc:25184:14 (dart+0x2622b20)
    #13 dart::Array::New(long, long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/object.cc:25196:12 (dart+0x2622b20)
    #14 dart::Array::New(long, dart::Heap::Space) out/ReleaseTSANX64/../../runtime/vm/object.h:11100:12 (dart+0x2705f00)
    #15 dart::DRT_HelperAllocateArray(dart::Isolate*, dart::Thread*, dart::Zone*, dart::NativeArguments) out/ReleaseTSANX64/../../runtime/vm/runtime_entry.cc:375:7 (dart+0x2705f00)
    #16 dart::DRT_AllocateArray(dart::NativeArguments) out/ReleaseTSANX64/../../runtime/vm/runtime_entry.cc:353:1 (dart+0x2705f00)
    #17 <null> <null> (0x7f939c782b4a)
    #18 dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:37:10 (dart+0x24fd2b1)
    #19 dart::DartLibraryCalls::HandleMessage(long, dart::Instance const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:718:28 (dart+0x24fd2b1)
    #20 dart::IsolateMessageHandler::HandleMessage(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<dart::Message, std::_LIBCPP_ABI_NAMESPACE::default_delete<dart::Message>>) out/ReleaseTSANX64/../../runtime/vm/isolate.cc:1397:15 (dart+0x2533d00)
    #21 dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool) out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:238:16 (dart+0x25748df)
    #22 dart::MessageHandler::TaskCallback() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:457:18 (dart+0x25752d0)
    #23 dart::MessageHandlerTask::Run() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:31:15 (dart+0x2575a73)
    #24 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158:15 (dart+0x276529e)
    #25 dart::ThreadPool::Worker::Main(unsigned long) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:330:9 (dart+0x27657a7)
    #26 dart::ThreadStart(void*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:154:5 (dart+0x2687a23)

  Mutex M0 (0x726800000878) created at:
    #0 pthread_mutex_init ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1315:3 (dart+0x219f83f)
    #1 dart::Mutex::Mutex(char const*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:308:12 (dart+0x2687de7)
    #2 dart::Scavenger::Scavenger(dart::Heap*, long) out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:777:12 (dart+0x27b4576)
    #3 dart::Heap::Heap(dart::IsolateGroup*, bool, long, long) out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:49:7 (dart+0x27971ff)
    #4 dart::Heap::Init(dart::IsolateGroup*, bool, long, long) out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:698:34 (dart+0x279b2c3)
    #5 dart::IsolateGroup::CreateHeap(bool, bool) out/ReleaseTSANX64/../../runtime/vm/isolate.cc:478:3 (dart+0x252d6cc)
    #6 Dart_CreateIsolateGroup out/ReleaseTSANX64/../../runtime/vm/dart_api_impl.cc:1360:10 (dart+0x2af1d52)
    #7 dart::bin::CreateIsolateGroupAndSetupHelper(bool, char const*, char const*, char const*, Dart_IsolateFlags*, void*, char**, int*, bool) out/ReleaseTSANX64/../../runtime/bin/main_impl.cc:828:15 (dart+0x22256a7)
    #8 dart::bin::RunMainIsolate(char const*, char const*, bool, dart::bin::CommandLineOptions*) out/ReleaseTSANX64/../../runtime/bin/main_impl.cc:1044:26 (dart+0x2224e52)
    #9 dart::bin::main(int, char**) out/ReleaseTSANX64/../../runtime/bin/main_impl.cc:1441:7 (dart+0x22264bb)
    #10 main out/ReleaseTSANX64/../../runtime/bin/main.cc:9:3 (dart+0x2224d04)

  Thread T19 'DartWorker' (tid=542152, running) created by thread T16 at:
    #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1022:3 (dart+0x219e04b)
    #1 dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:173:12 (dart+0x26878e3)
    #2 dart::ThreadPool::Worker::StartThread() out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:296:16 (dart+0x27649f1)
    #3 dart::ThreadPool::RunImpl(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<dart::ThreadPool::Task, std::_LIBCPP_ABI_NAMESPACE::default_delete<dart::ThreadPool::Task>>) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:94:17 (dart+0x27649f1)
    #4 bool dart::ThreadPool::Run<dart::SpawnIsolateTask, dart::Isolate*&, std::_LIBCPP_ABI_NAMESPACE::unique_ptr<dart::IsolateSpawnState, std::_LIBCPP_ABI_NAMESPACE::default_delete<dart::IsolateSpawnState>>>(dart::Isolate*&, std::_LIBCPP_ABI_NAMESPACE::unique_ptr<dart::IsolateSpawnState, std::_LIBCPP_ABI_NAMESPACE::default_delete<dart::IsolateSpawnState>>&&) out/ReleaseTSANX64/../../runtime/vm/thread_pool.h:46:12 (dart+0x2462f8b)
    #5 dart::DN_HelperIsolate_spawnFunction(dart::Isolate*, dart::Thread*, dart::Zone*, dart::NativeArguments*) out/ReleaseTSANX64/../../runtime/lib/isolate.cc:919:36 (dart+0x2462f8b)
    #6 dart::BootstrapNatives::DN_Isolate_spawnFunction(dart::Thread*, dart::Zone*, dart::NativeArguments*) out/ReleaseTSANX64/../../runtime/lib/isolate.cc:866:1 (dart+0x2462f8b)
    #7 dart::NativeEntry::BootstrapNativeCallWrapper(_Dart_NativeArguments*, void (*)(_Dart_NativeArguments*)) out/ReleaseTSANX64/../../runtime/vm/native_entry.cc:144:37 (dart+0x258f6d4)
    #8 <null> <null> (0x7f939c782cbb)
    #9 dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:37:10 (dart+0x24fd2b1)
    #10 dart::DartLibraryCalls::HandleMessage(long, dart::Instance const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:718:28 (dart+0x24fd2b1)
    #11 dart::IsolateMessageHandler::HandleMessage(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<dart::Message, std::_LIBCPP_ABI_NAMESPACE::default_delete<dart::Message>>) out/ReleaseTSANX64/../../runtime/vm/isolate.cc:1397:15 (dart+0x2533d00)
    #12 dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool) out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:238:16 (dart+0x25748df)
    #13 dart::MessageHandler::TaskCallback() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:457:18 (dart+0x25752d0)
    #14 dart::MessageHandlerTask::Run() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:31:15 (dart+0x2575a73)
    #15 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158:15 (dart+0x276529e)
    #16 dart::ThreadPool::Worker::Main(unsigned long) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:330:9 (dart+0x27657a7)
    #17 dart::ThreadStart(void*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:154:5 (dart+0x2687a23)

  Thread T18 'DartWorker' (tid=542151, running) created by thread T17 at:
    #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1022:3 (dart+0x219e04b)
    #1 dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:173:12 (dart+0x26878e3)
    #2 dart::ThreadPool::Worker::StartThread() out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:296:16 (dart+0x27649f1)
    #3 dart::ThreadPool::RunImpl(std::_LIBCPP_ABI_NAMESPACE::unique_ptr<dart::ThreadPool::Task, std::_LIBCPP_ABI_NAMESPACE::default_delete<dart::ThreadPool::Task>>) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:94:17 (dart+0x27649f1)
    #4 bool dart::ThreadPool::Run<dart::MessageHandlerTask, dart::MessageHandler*>(dart::MessageHandler*&&) out/ReleaseTSANX64/../../runtime/vm/thread_pool.h:46:12 (dart+0x2574356)
    #5 dart::MessageHandler::Run(dart::ThreadPool*, dart::MessageHandler::MessageStatus (*)(unsigned long), void (*)(unsigned long), unsigned long) out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:119:24 (dart+0x2574356)
    #6 dart::Isolate::Run() out/ReleaseTSANX64/../../runtime/vm/isolate.cc:2353:22 (dart+0x253785c)
    #7 Dart_RunLoopAsync out/ReleaseTSANX64/../../runtime/vm/dart_api_impl.cc:2095:12 (dart+0x2af672e)
    #8 dart::SpawnIsolateTask::Run(dart::Isolate*) out/ReleaseTSANX64/../../runtime/lib/isolate.cc:700:10 (dart+0x2466296)
    #9 dart::SpawnIsolateTask::RunLightweight(char const*) out/ReleaseTSANX64/../../runtime/lib/isolate.cc:665:5 (dart+0x2465cf4)
    #10 dart::SpawnIsolateTask::Run() out/ReleaseTSANX64/../../runtime/lib/isolate.cc:581:7 (dart+0x24659da)
    #11 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158:15 (dart+0x276529e)
    #12 dart::ThreadPool::Worker::Main(unsigned long) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:330:9 (dart+0x27657a7)
    #13 dart::ThreadStart(void*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:154:5 (dart+0x2687a23)

SUMMARY: ThreadSanitizer: data race out/ReleaseTSANX64/../../third_party/libcxx/include/atomic:1052:12 in unsigned long std::_LIBCPP_ABI_NAMESPACE::__cxx_atomic_fetch_and[abi:v15000]<unsigned long>(std::_LIBCPP_ABI_NAMESPACE::__cxx_atomic_base_impl<unsigned long>*, unsigned long, std::_LIBCPP_ABI_NAMESPACE::memory_order)
==================
=> Running "out/ReleaseTSANX64/dart --disable-dart-dev -Drepeat=4 -Dshard=178 -Dshards=200 --sound-null-safety runtime/tests/concurrency/generated_stress_test.dart.jit.dill" failed with -6
=> Possible crash 0 (pid: 542132)

Full log: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8756104625124336657/+/u/collect_shards/Run_Isolate_Stress_Tests_shard_1/task_stdout_stderr:_Run_Isolate_Stress_Tests_shard_1

/cc @rmacnak-google

alexmarkov avatar Feb 14 '24 19:02 alexmarkov