Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tsan-reported data race for Object tags_ between scavenger reading and allocator writing #45217

Closed
aam opened this issue Mar 5, 2021 · 0 comments
Labels
area-vm Use area-vm for VM related issues, including code coverage, FFI, and the AOT and JIT backends.

Comments

@aam
Copy link
Contributor

aam commented Mar 5, 2021

$ out/ReleaseTSANX64/dart runtime/tests/vm/dart_2/isolates/reload_many_isolates_test.dart
...
==================
WARNING: ThreadSanitizer: data race (pid=3395038)
  Atomic read of size 8 at 0x7f44ca500040 by thread T2 (mutexes: write M305):
    #0 __tsan_atomic64_load ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-linux-gnu-bins/compiler-rt/lib/tsan/rtl/tsan_interface_atomic.cpp:539 (dart+0x1b932dc)
    #1 unsigned long std::__2::__cxx_atomic_load<unsigned long>(std::__2::__cxx_atomic_base_impl<unsigned long> const*, std::__2::memory_order) ../../out/ReleaseTSANX64/../../buildtools/linux-x64/clang/bin/../include/c++/v1/atomic:977 (dart+0x2126b9c)
    #2 std::__2::__atomic_base<unsigned long, false>::load(std::__2::memory_order) const ../../out/ReleaseTSANX64/../../buildtools/linux-x64/clang/bin/../include/c++/v1/atomic:1578 (dart+0x2126b9c)
    #3 dart::UntaggedObject::ClassIdTag::Type dart::UntaggedObject::Tags<unsigned long>::Read<dart::UntaggedObject::ClassIdTag>() const ../../out/ReleaseTSANX64/../../runtime/vm/raw_object.h:237 (dart+0x2126b9c)
    #4 dart::UntaggedObject::GetClassId() const ../../out/ReleaseTSANX64/../../runtime/vm/raw_object.h:371 (dart+0x2126b9c)
    #5 dart::ObjectPtr::GetClassId() const ../../out/ReleaseTSANX64/../../runtime/vm/raw_object.h:742 (dart+0x2126b9c)
    #6 dart::ScavengerVisitorBase<true>::VisitTypedDataViewPointers(dart::TypedDataViewPtr, dart::ObjectPtr*, dart::ObjectPtr*) ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:150 (dart+0x2126b9c)
    #7 dart::UntaggedObject::VisitPointersPredefined(dart::ObjectPointerVisitor*, long) ??:? (dart+0x1fffe57)
    #8 long dart::UntaggedObject::VisitPointersNonvirtual<dart::ScavengerVisitorBase<true> >(dart::ScavengerVisitorBase<true>*) ../../out/ReleaseTSANX64/../../runtime/vm/raw_object.h:467 (dart+0x212628f)
    #9 dart::ScavengerVisitorBase<true>::ProcessPromotedList() ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:1211 (dart+0x212628f)
    #10 dart::ScavengerVisitorBase<true>::ProcessSurvivors() ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:211 (dart+0x21250c9)
    #11 dart::ParallelScavengerTask::RunEnteredIsolateGroup() ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:550 (dart+0x212298f)
    #12 dart::Scavenger::ParallelScavenge(dart::SemiSpace*) ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:1632 (dart+0x21217ea)
    #13 dart::Scavenger::Scavenge() ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:1558 (dart+0x2120f64)
    #14 dart::Heap::CollectNewSpaceGarbage(dart::Thread*, dart::Heap::GCReason) ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:453 (dart+0x2108835)
    #15 dart::Heap::CollectGarbage(dart::Heap::Space) ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:537 (dart+0x2106596)
    #16 dart::Heap::AllocateNew(long) ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:84 (dart+0x2106596)
    #17 dart::Heap::Allocate(long, dart::Heap::Space) ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.h:89 (dart+0x1edf326)
    #18 dart::Object::Allocate(long, long, dart::Heap::Space) ../../out/ReleaseTSANX64/../../runtime/vm/object.cc:2584 (dart+0x1edf326)
    #19 dart::TypedData::New(long, long, dart::Heap::Space) ../../out/ReleaseTSANX64/../../runtime/vm/object.cc:24301 (dart+0x1f72f03)
    #20 dart::DRT_HelperAllocateTypedData(dart::Isolate*, dart::Thread*, dart::Zone*, dart::NativeArguments) ../../out/ReleaseTSANX64/../../runtime/vm/runtime_entry.cc:304 (dart+0x206cdbe)
    #21 dart::DRT_AllocateTypedData(dart::NativeArguments) ../../out/ReleaseTSANX64/../../runtime/vm/runtime_entry.cc:286 (dart+0x206cdbe)
    #22 <null> <null> (memfd:dart-codespace (deleted)+0x2162)
    #23 dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&, dart::Array const&, unsigned long) ../../out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:147 (dart+0x1e38cfb)
    #24 dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&) ../../out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:37 (dart+0x1e3d012)
    #25 dart::DartLibraryCalls::HandleMessage(dart::Object const&, dart::Instance const&) ../../out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:792 (dart+0x1e3d012)
    #26 dart::IsolateMessageHandler::HandleMessage(std::__2::unique_ptr<dart::Message, std::__2::default_delete<dart::Message> >) ../../out/ReleaseTSANX64/../../runtime/vm/isolate.cc:1433 (dart+0x1e86037)
    #27 dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool) ../../out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:233 (dart+0x1ed22e0)
    #28 dart::MessageHandler::TaskCallback() ../../out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:443 (dart+0x1ed2ce0)
    #29 dart::MessageHandlerTask::Run() ../../out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:31 (dart+0x1ed3763)
    #30 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158 (dart+0x20cba9c)
    #31 dart::ThreadPool::Worker::Main(unsigned long) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:323 (dart+0x20cc485)
    #32 dart::ThreadStart(void*) ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:153 (dart+0x1fd2322)

  Previous write of size 8 at 0x7f44ca500040 by thread T3 (mutexes: write M302):
    #0 mmap ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-linux-gnu-bins/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:7141 (dart+0x1b792a1)
    #1 dart::MapAligned(int, int, long, long, long) ../../out/ReleaseTSANX64/../../runtime/vm/virtual_memory_posix.cc:222 (dart+0x20e9fc0)
    #2 dart::VirtualMemory::AllocateAligned(long, long, bool, char const*) ../../out/ReleaseTSANX64/../../runtime/vm/virtual_memory_posix.cc:321 (dart+0x20e9fc0)
    #3 dart::OldPage::Allocate(long, dart::OldPage::PageType, char const*) ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:51 (dart+0x2113625)
    #4 dart::PageSpace::AllocatePage(dart::OldPage::PageType, bool) ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:354 (dart+0x2113625)
    #5 dart::PageSpace::TryAllocateInFreshPage(long, dart::FreeList*, dart::OldPage::PageType, dart::PageSpace::GrowthPolicy, bool) ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:490 (dart+0x2114471)
    #6 dart::PageSpace::TryAllocateDataBumpLocked(dart::FreeList*, long) ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:1379 (dart+0x2119954)
    #7 dart::PageSpace::TryAllocatePromoLockedSlow(dart::FreeList*, long) ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:1413 (dart+0x21199b0)
    #8 dart::PageSpace::TryAllocatePromoLocked(dart::FreeList*, long) ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.h:487 (dart+0x2125aaa)
    #9 dart::ScavengerVisitorBase<true>::ScavengeObject(dart::ObjectPtr) ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:359 (dart+0x2125aaa)
    #10 dart::ScavengerVisitorBase<true>::ScavengePointer(dart::ObjectPtr*) ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:285 (dart+0x2125aaa)
    #11 dart::ScavengerVisitorBase<true>::VisitPointers(dart::ObjectPtr*, dart::ObjectPtr*) ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:167 (dart+0x2125aaa)
    #12 dart::UntaggedObject::VisitPointersPredefined(dart::ObjectPointerVisitor*, long) ??:? (dart+0x2000046)
    #13 long dart::UntaggedObject::VisitPointersNonvirtual<dart::ScavengerVisitorBase<true> >(dart::ScavengerVisitorBase<true>*) ../../out/ReleaseTSANX64/../../runtime/vm/raw_object.h:467 (dart+0x2125751)
    #14 void dart::Scavenger::IterateStoreBuffers<true>(dart::ScavengerVisitorBase<true>*) ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:1091 (dart+0x2125751)
    #15 void dart::Scavenger::IterateRoots<true>(dart::ScavengerVisitorBase<true>*) ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:1148 (dart+0x212557a)
    #16 dart::ScavengerVisitorBase<true>::ProcessRoots() ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:198 (dart+0x2124f8f)
    #17 dart::ParallelScavengerTask::RunEnteredIsolateGroup() ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:544 (dart+0x212285e)
    #18 dart::ParallelScavengerTask::Run() ../../out/ReleaseTSANX64/../../runtime/vm/heap/scavenger.cc:533 (dart+0x2124dc9)
    #19 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158 (dart+0x20cba9c)
    #20 dart::ThreadPool::Worker::Main(unsigned long) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:323 (dart+0x20cc485)
    #21 dart::ThreadStart(void*) ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:153 (dart+0x1fd2322)

  Location is global '<null>' at 0x000000000000 (memfd:dart-oldspace (deleted)+0x000000000040)

  Mutex M305 (0x7b7c00020f00) created at:
    #0 pthread_mutex_init ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-linux-gnu-bins/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1220 (dart+0x1b4b88d)
    #1 Mutex ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:300 (dart+0x1fd2757)
    #2 FreeList ../../out/ReleaseTSANX64/../../runtime/vm/heap/freelist.cc:53 (dart+0x21031f7)
    #3 PageSpace ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:225 (dart+0x2112637)
    #4 Heap ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:50 (dart+0x21059c1)
    #5 dart::Heap::Init(dart::IsolateGroup*, bool, long, long) ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:673 (dart+0x2109f43)
    #6 dart::IsolateGroup::CreateHeap(bool, bool) ../../out/ReleaseTSANX64/../../runtime/vm/isolate.cc:469 (dart+0x1e7ffe6)
    #7 Dart_CreateIsolateGroup ../../out/ReleaseTSANX64/../../runtime/vm/dart_api_impl.cc:1351 (dart+0x278bdd9)
    #8 dart::bin::CreateAndSetupKernelIsolate(char const*, char const*, Dart_IsolateFlags*, char**, int*) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:455 (dart+0x1bc3b31)
    #9 dart::bin::CreateIsolateGroupAndSetup(char const*, char const*, char const*, char const*, Dart_IsolateFlags*, void*, char**) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:829 (dart+0x1bc3b31)
    #10 dart::RunKernelTask::Run() ../../out/ReleaseTSANX64/../../runtime/vm/kernel_isolate.cc:100 (dart+0x1ebd1e9)
    #11 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158 (dart+0x20cba9c)
    #12 dart::ThreadPool::Worker::Main(unsigned long) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:323 (dart+0x20cc485)
    #13 dart::ThreadStart(void*) ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:153 (dart+0x1fd2322)

  Mutex M302 (0x7b7c00020a90) created at:
    #0 pthread_mutex_init ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-linux-gnu-bins/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1220 (dart+0x1b4b88d)
    #1 Mutex ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:300 (dart+0x1fd2757)
    #2 FreeList ../../out/ReleaseTSANX64/../../runtime/vm/heap/freelist.cc:53 (dart+0x21031f7)
    #3 PageSpace ../../out/ReleaseTSANX64/../../runtime/vm/heap/pages.cc:225 (dart+0x2112637)
    #4 Heap ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:50 (dart+0x21059c1)
    #5 dart::Heap::Init(dart::IsolateGroup*, bool, long, long) ../../out/ReleaseTSANX64/../../runtime/vm/heap/heap.cc:673 (dart+0x2109f43)
    #6 dart::IsolateGroup::CreateHeap(bool, bool) ../../out/ReleaseTSANX64/../../runtime/vm/isolate.cc:469 (dart+0x1e7ffe6)
    #7 Dart_CreateIsolateGroup ../../out/ReleaseTSANX64/../../runtime/vm/dart_api_impl.cc:1351 (dart+0x278bdd9)
    #8 dart::bin::CreateAndSetupKernelIsolate(char const*, char const*, Dart_IsolateFlags*, char**, int*) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:455 (dart+0x1bc3b31)
    #9 dart::bin::CreateIsolateGroupAndSetup(char const*, char const*, char const*, char const*, Dart_IsolateFlags*, void*, char**) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:829 (dart+0x1bc3b31)
    #10 dart::RunKernelTask::Run() ../../out/ReleaseTSANX64/../../runtime/vm/kernel_isolate.cc:100 (dart+0x1ebd1e9)
    #11 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:158 (dart+0x20cba9c)
    #12 dart::ThreadPool::Worker::Main(unsigned long) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:323 (dart+0x20cc485)
    #13 dart::ThreadStart(void*) ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:153 (dart+0x1fd2322)

  Thread T2 'DartWorker' (tid=3395041, running) created by main thread at:
    #0 pthread_create ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-linux-gnu-bins/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:962 (dart+0x1b4a41b)
    #1 dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long) ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:172 (dart+0x1fd21ac)
    #2 dart::ThreadPool::Worker::StartThread() ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:296 (dart+0x20cb159)
    #3 dart::ThreadPool::RunImpl(std::__2::unique_ptr<dart::ThreadPool::Task, std::__2::default_delete<dart::ThreadPool::Task> >) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:94 (dart+0x20cb159)
    #4 bool dart::ThreadPool::Run<dart::RunServiceTask>() ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.h:46 (dart+0x2098628)
    #5 dart::ServiceIsolate::Run() ../../out/ReleaseTSANX64/../../runtime/vm/service_isolate.cc:496 (dart+0x2098628)
    #6 dart::Dart::Init(unsigned char const*, unsigned char const*, _Dart_Isolate* (*)(char const*, char const*, char const*, char const*, Dart_IsolateFlags*, void*, char**), bool (*)(void**, char**), void (*)(void*, void*), void (*)(void*, void*), void (*)(void*), void (*)(), void* (*)(char const*, bool), void (*)(unsigned char**, long*, void*), void (*)(void const*, long, void*), void (*)(void*), bool (*)(unsigned char*, long), _Dart_Handle* (*)(), bool, Dart_CodeObserver*) ../../out/ReleaseTSANX64/../../runtime/vm/dart.cc:427 (dart+0x1e2e86d)
    #7 Dart_Initialize ../../out/ReleaseTSANX64/../../runtime/vm/dart_api_impl.cc:1158 (dart+0x278ae0c)
    #8 dart::bin::main(int, char**) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:1325 (dart+0x1bc3238)
    #9 main ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:1401 (dart+0x1bc4732)

  Thread T3 'DartWorker' (tid=3395042, running) created by main thread at:
    #0 pthread_create ../recipe_cleanup/clangshYTOG/llvm_build_dir/tools/clang/stage2-bins/runtimes/runtimes-x86_64-unknown-linux-gnu-bins/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:962 (dart+0x1b4a41b)
    #1 dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long) ../../out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:172 (dart+0x1fd21ac)
    #2 dart::ThreadPool::Worker::StartThread() ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:296 (dart+0x20cb159)
    #3 dart::ThreadPool::RunImpl(std::__2::unique_ptr<dart::ThreadPool::Task, std::__2::default_delete<dart::ThreadPool::Task> >) ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:94 (dart+0x20cb159)
    #4 bool dart::ThreadPool::Run<dart::RunKernelTask>() ../../out/ReleaseTSANX64/../../runtime/vm/thread_pool.h:46 (dart+0x1eb9ecb)
    #5 dart::KernelIsolate::Start() ../../out/ReleaseTSANX64/../../runtime/vm/kernel_isolate.cc:257 (dart+0x1eb9ecb)
    #6 dart::KernelIsolate::DetectNullSafety(char const*, char const*, char const*) ../../out/ReleaseTSANX64/../../runtime/vm/kernel_isolate.cc:1061 (dart+0x1ebb1da)
    #7 dart::Dart::DetectNullSafety(char const*, unsigned char const*, unsigned char const*, unsigned char const*, long, char const*, char const*) ../../out/ReleaseTSANX64/../../runtime/vm/dart.cc:805 (dart+0x1e2f995)
    #8 Dart_DetectNullSafety ../../out/ReleaseTSANX64/../../runtime/vm/dart_api_impl.cc:6188 (dart+0x27bf6d9)
    #9 dart::bin::CreateIsolateGroupAndSetupHelper(bool, char const*, char const*, char const*, Dart_IsolateFlags*, void*, char**, int*) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:740 (dart+0x1bc24f6)
    #10 dart::bin::RunMainIsolate(char const*, char const*, dart::bin::CommandLineOptions*) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:958 (dart+0x1bc1b51)
    #11 dart::bin::main(int, char**) ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:1363 (dart+0x1bc3445)
    #12 main ../../out/ReleaseTSANX64/../../runtime/bin/main.cc:1401 (dart+0x1bc4732)

SUMMARY: ThreadSanitizer: data race ../../out/ReleaseTSANX64/../../buildtools/linux-x64/clang/bin/../include/c++/v1/atomic:977 in unsigned long std::__2::__cxx_atomic_load<unsigned long>(std::__2::__cxx_atomic_base_impl<unsigned long> const*, std::__2::memory_order)
==================

cc @rmacnak-google

@aam aam added the area-vm Use area-vm for VM related issues, including code coverage, FFI, and the AOT and JIT backends. label Mar 5, 2021
dart-bot pushed a commit that referenced this issue Mar 9, 2021
…allel scavenge.

TEST=tsan

Bug: #45217
Change-Id: I0045b793767b8397c62ce992cc775eff989e8642
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/189800
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-vm Use area-vm for VM related issues, including code coverage, FFI, and the AOT and JIT backends.
Projects
None yet
Development

No branches or pull requests

2 participants