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: data race during card marking #56895

Open
rmacnak-google opened this issue Oct 14, 2024 · 0 comments
Open

TSAN: data race during card marking #56895

rmacnak-google opened this issue Oct 14, 2024 · 0 comments
Labels
area-vm Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends. triaged Issue has been triaged by sub team type-bug Incorrect behavior (everything from a crash to more subtle misbehavior) vm-gc Related to the VM's garbage collector

Comments

@rmacnak-google
Copy link
Contributor

WARNING: ThreadSanitizer: data race (pid=660615)
  Atomic write of size 8 at 0x72640004fb98 by thread T2:
    #0 unsigned long std::_LIBCPP_ABI_NAMESPACE::__cxx_atomic_fetch_or[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:1063:12 (dart+0x28ed404)
    #1 std::_LIBCPP_ABI_NAMESPACE::__atomic_base<unsigned long, true>::fetch_or[abi:v15000](unsigned long, std::_LIBCPP_ABI_NAMESPACE::memory_order) out/ReleaseTSANX64/../../third_party/libcxx/include/atomic:1705:17 (dart+0x28ed404)
    #2 dart::Page::RememberCard(unsigned long) out/ReleaseTSANX64/../../runtime/vm/heap/page.h:299:11 (dart+0x28ed404)
    #3 dart::Page::RememberCard(dart::ObjectPtr const*) out/ReleaseTSANX64/../../runtime/vm/heap/page.h:186:5 (dart+0x28ed404)
    #4 dart::MarkingVisitorBase<true>::VisitCards(dart::ArrayPtr) out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:221:15 (dart+0x28ed404)
    #5 dart::MarkingVisitorBase<true>::DrainMarkingStackWithPauseChecks() out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:161:18 (dart+0x28ee848)
    #6 dart::ConcurrentMarkTask::Run() out/ReleaseTSANX64/../../runtime/vm/heap/marker.cc:1027:17 (dart+0x28ee1bd)
    #7 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:203:15 (dart+0x28ac13e)
    #8 dart::ThreadPool::Worker::Main(unsigned long) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:363:9 (dart+0x28ac69a)
    #9 dart::ThreadStart(void*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:97:5 (dart+0x281d486)

  Previous write of size 8 at 0x72640004fb98 by thread T9:
    #0 calloc ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:686:5 (dart+0x229024b)
    #1 dart::calloc(unsigned long, unsigned long) out/ReleaseTSANX64/../../runtime/platform/allocation.cc:12:18 (dart+0x2321224)
    #2 dart::Page::RememberCard(unsigned long) out/ReleaseTSANX64/../../runtime/vm/heap/page.h:283:36 (dart+0x283ff5d)
    #3 dart::Page::RememberCard(dart::ObjectPtr const*) out/ReleaseTSANX64/../../runtime/vm/heap/page.h:186:5 (dart+0x283ff5d)
    #4 DLRT_RememberCard out/ReleaseTSANX64/../../runtime/vm/raw_object.cc:779:21 (dart+0x283ff5d)
    #5 <null> <null> (0x7f4ee7d80dce)
    #6 dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:38:10 (dart+0x268d841)
    #7 dart::DartLibraryCalls::HandleMessage(long, dart::Instance const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:718:28 (dart+0x268d841)
    #8 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:1456:15 (dart+0x26c5ee1)
    #9 dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool) out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:229:16 (dart+0x27072d2)
    #10 dart::MessageHandler::TaskCallback() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:443:18 (dart+0x2707981)
    #11 dart::MessageHandlerTask::Run() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:31:15 (dart+0x2708053)
    #12 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:203:15 (dart+0x28ac13e)
    #13 dart::ThreadPool::Worker::Main(unsigned long) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:363:9 (dart+0x28ac69a)
    #14 dart::ThreadStart(void*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:97:5 (dart+0x281d486)

  Location is heap block of size 1032 at 0x72640004fb00 allocated by thread T9:
    #0 calloc ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:686:5 (dart+0x229024b)
    #1 dart::calloc(unsigned long, unsigned long) out/ReleaseTSANX64/../../runtime/platform/allocation.cc:12:18 (dart+0x2321224)
    #2 dart::Page::RememberCard(unsigned long) out/ReleaseTSANX64/../../runtime/vm/heap/page.h:283:36 (dart+0x283ff5d)
    #3 dart::Page::RememberCard(dart::ObjectPtr const*) out/ReleaseTSANX64/../../runtime/vm/heap/page.h:186:5 (dart+0x283ff5d)
    #4 DLRT_RememberCard out/ReleaseTSANX64/../../runtime/vm/raw_object.cc:779:21 (dart+0x283ff5d)
    #5 <null> <null> (0x7f4ee7d80dce)
    #6 dart::DartEntry::InvokeFunction(dart::Function const&, dart::Array const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:38:10 (dart+0x268d841)
    #7 dart::DartLibraryCalls::HandleMessage(long, dart::Instance const&) out/ReleaseTSANX64/../../runtime/vm/dart_entry.cc:718:28 (dart+0x268d841)
    #8 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:1456:15 (dart+0x26c5ee1)
    #9 dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool) out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:229:16 (dart+0x27072d2)
    #10 dart::MessageHandler::TaskCallback() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:443:18 (dart+0x2707981)
    #11 dart::MessageHandlerTask::Run() out/ReleaseTSANX64/../../runtime/vm/message_handler.cc:31:15 (dart+0x2708053)
    #12 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:203:15 (dart+0x28ac13e)
    #13 dart::ThreadPool::Worker::Main(unsigned long) out/ReleaseTSANX64/../../runtime/vm/thread_pool.cc:363:9 (dart+0x28ac69a)
    #14 dart::ThreadStart(void*) out/ReleaseTSANX64/../../runtime/vm/os_thread_linux.cc:97:5 (dart+0x281d486)

log

@rmacnak-google rmacnak-google added area-vm Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends. type-bug Incorrect behavior (everything from a crash to more subtle misbehavior) vm-gc Related to the VM's garbage collector labels Oct 14, 2024
@a-siva a-siva added the triaged Issue has been triaged by sub team label Oct 16, 2024
copybara-service bot pushed a commit that referenced this issue Oct 16, 2024
This avoids data races when multiple mutators compete to install the card table, and allows removing the initialization check from the write barrier.

TEST=ci, tsan
Bug: #56895
Change-Id: I30fe4687d3ca771f6c00dfa59e8dadec23d557a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390023
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@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, and the AOT and JIT backends. triaged Issue has been triaged by sub team type-bug Incorrect behavior (everything from a crash to more subtle misbehavior) vm-gc Related to the VM's garbage collector
Projects
None yet
Development

No branches or pull requests

2 participants