Skip to content

Data race in timeline file recorder #61475

@rmacnak-google

Description

@rmacnak-google
DART_CONFIGURATION=ReleaseTSANARM64 xcodebuild/ReleaseTSANARM64/dart --no-enable-fast-object-copy -Dtest_runner.configuration=vm-tsan-mac-release-arm64 --ignore-unrecognized-flags --packages=/Volumes/Work/s/w/ir/.dart_tool/package_config.json /Volumes/Work/s/w/ir/runtime/tests/vm/dart/isolates/fast_object_copy_timeline_test.dart

...

WARNING: ThreadSanitizer: data race (pid=35902)
  Read of size 8 at 0x00010db03e58 by thread T6 (mutexes: write M0, write M1):
    #0 dart::TimelineEventFileRecorderBase::GetNewBlockLocked() <null> (dartvm:arm64+0x100564830)
    #1 dart::TimelineEventRecorder::ThreadBlockStartEvent() <null> (dartvm:arm64+0x1005618fc)
    #2 dart::TimelineEventFileRecorderBase::StartEvent() <null> (dartvm:arm64+0x1005644fc)
    #3 dart::TimelineEventFileRecorder::AddTrackMetadataBasedOnThread(long, long, char const*) <null> (dartvm:arm64+0x100565244)
    #4 dart::OSThread::SetName(char const*) <null> (dartvm:arm64+0x1004d3f64)
    #5 dart::ThreadStart(void*) <null> (dartvm:arm64+0x1004d498c)

  Previous write of size 8 at 0x00010db03e58 by thread T2 (mutexes: write M2):
    #0 dart::TimelineEventFileRecorderBase::Drain() <null> (dartvm:arm64+0x10056444c)
    #1 dart::TimelineEventFileRecorderBaseStart(unsigned long) <null> (dartvm:arm64+0x1005647f0)
    #2 dart::ThreadStart(void*) <null> (dartvm:arm64+0x1004d4994)

  Location is heap block of size 664 at 0x00010db03c00 allocated by main thread:
    #0 malloc <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x61670)
    #1 dart::malloc(unsigned long) <null> (dartvm:arm64+0x10000b60c)
    #2 dart::Timeline::Init() <null> (dartvm:arm64+0x10055caa0)
    #3 dart::Dart::DartInit(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035d298)
    #4 dart::Dart::Init(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035da40)
    #5 Dart_Initialize <null> (dartvm:arm64+0x1008a7bfc)
    #6 dart::bin::main(int, char**) <null> (dartvm:arm64+0x1000051e8)
    #7 main <null> (dartvm:arm64+0x100004084)

  Mutex M0 (0x00010cf00f00) created at:
    #0 pthread_mutex_init <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x324e0)
    #1 dart::Mutex::Mutex() <null> (dartvm:arm64+0x10000c054)
    #2 dart::Mutex::Mutex() <null> (dartvm:arm64+0x10000c1e4)
    #3 dart::OSThread::Init() <null> (dartvm:arm64+0x1004d416c)
    #4 dart::Dart::DartInit(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035d28c)
    #5 dart::Dart::Init(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035da40)
    #6 Dart_Initialize <null> (dartvm:arm64+0x1008a7bfc)
    #7 dart::bin::main(int, char**) <null> (dartvm:arm64+0x1000051e8)
    #8 main <null> (dartvm:arm64+0x100004084)

  Mutex M1 (0x00010db03c08) created at:
    #0 pthread_mutex_init <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x324e0)
    #1 dart::Mutex::Mutex() <null> (dartvm:arm64+0x10000c054)
    #2 dart::Mutex::Mutex() <null> (dartvm:arm64+0x10000c1e4)
    #3 dart::TimelineEventFileRecorderBase::TimelineEventFileRecorderBase(char const*) <null> (dartvm:arm64+0x100563f60)
    #4 dart::TimelineEventFileRecorder::TimelineEventFileRecorder(char const*) <null> (dartvm:arm64+0x100564e78)
    #5 dart::Timeline::Init() <null> (dartvm:arm64+0x10055caac)
    #6 dart::Dart::DartInit(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035d298)
    #7 dart::Dart::Init(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035da40)
    #8 Dart_Initialize <null> (dartvm:arm64+0x1008a7bfc)
    #9 dart::bin::main(int, char**) <null> (dartvm:arm64+0x1000051e8)
    #10 main <null> (dartvm:arm64+0x100004084)

  Mutex M2 (0x00010db03dd0) created at:
    #0 pthread_mutex_init <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x324e0)
    #1 dart::Mutex::Mutex() <null> (dartvm:arm64+0x10000c054)
    #2 dart::Mutex::Mutex() <null> (dartvm:arm64+0x10000c1e4)
    #3 dart::TimelineEventFileRecorderBase::TimelineEventFileRecorderBase(char const*) <null> (dartvm:arm64+0x100563fd8)
    #4 dart::TimelineEventFileRecorder::TimelineEventFileRecorder(char const*) <null> (dartvm:arm64+0x100564e78)
    #5 dart::Timeline::Init() <null> (dartvm:arm64+0x10055caac)
    #6 dart::Dart::DartInit(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035d298)
    #7 dart::Dart::Init(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035da40)
    #8 Dart_Initialize <null> (dartvm:arm64+0x1008a7bfc)
    #9 dart::bin::main(int, char**) <null> (dartvm:arm64+0x1000051e8)
    #10 main <null> (dartvm:arm64+0x100004084)

  Thread T6 (tid=305782, running) created by thread T3 at:
    #0 pthread_create <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x30b68)
    #1 dart::OSThread::TryStart(char const*, void (*)(unsigned long), unsigned long) <null> (dartvm:arm64+0x1004d4854)
    #2 dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long) <null> (dartvm:arm64+0x1004d4690)
    #3 dart::ThreadPool::RunImpl(std::_d::unique_ptr<dart::ThreadPool::Task, std::_d::default_delete<dart::ThreadPool::Task>>) <null> (dartvm:arm64+0x10055b184)
    #4 dart::MessageHandler::Run(dart::ThreadPool*, dart::MessageHandler::MessageStatus (*)(unsigned long), void (*)(unsigned long), unsigned long) <null> (dartvm:arm64+0x1003d7db4)
    #5 dart::RunServiceTask::Run() <null> (dartvm:arm64+0x100535568)
    #6 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) <null> (dartvm:arm64+0x10055b8d0)
    #7 dart::ThreadPool::Worker::Main(unsigned long) <null> (dartvm:arm64+0x10055bcf4)
    #8 dart::ThreadStart(void*) <null> (dartvm:arm64+0x1004d4994)

  Thread T2 (tid=305754, running) created by main thread at:
    #0 pthread_create <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64+0x30b68)
    #1 dart::OSThread::TryStart(char const*, void (*)(unsigned long), unsigned long) <null> (dartvm:arm64+0x1004d4854)
    #2 dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long) <null> (dartvm:arm64+0x1004d4690)
    #3 dart::TimelineEventFileRecorder::TimelineEventFileRecorder(char const*) <null> (dartvm:arm64+0x100564f80)
    #4 dart::Timeline::Init() <null> (dartvm:arm64+0x10055caac)
    #5 dart::Dart::DartInit(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035d298)
    #6 dart::Dart::Init(Dart_InitializeParams const*) <null> (dartvm:arm64+0x10035da40)
    #7 Dart_Initialize <null> (dartvm:arm64+0x1008a7bfc)
    #8 dart::bin::main(int, char**) <null> (dartvm:arm64+0x1000051e8)
    #9 main <null> (dartvm:arm64+0x100004084)

Metadata

Metadata

Assignees

Labels

P2A bug or feature request we're likely to work onarea-vmUse area-vm for VM related issues, including code coverage, and the AOT and JIT backends.sanitizerFound with sanitizer testing (ASAN, LSAN, MSAN, TSAN, UBSAN)triagedIssue has been triaged by sub teamvm-serviceThe VM Service Protocol, both the specification and its implementation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions