Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Ignore thread leaks from Dart VM in tsan instrumented builds. #13049

Merged

Conversation

chinmaygarde
Copy link
Member

No description provided.

@chinmaygarde
Copy link
Member Author

cc @rmacnak-google: Just FYI, the leak report was from the standalone Dart VM.

==================
WARNING: ThreadSanitizer: thread leak (pid=40433)
  Thread T6 (tid=189642, finished) created by thread T4 at:
    #0 pthread_create <null>:3706720 (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x28dfd)
    #1 dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long) os_thread_macos.cc:130 (dart:x86_64+0x1005b147a)
    #2 dart::ThreadPool::RunImpl(std::__1::unique_ptr<dart::ThreadPool::Task, std::__1::default_delete<dart::ThreadPool::Task> >) thread_pool.cc:338 (dart:x86_64+0x1006ad076)
    #3 dart::GCMarker::MarkObjects(dart::PageSpace*) thread_pool.h:43 (dart:x86_64+0x10099aec2)
    #4 dart::PageSpace::CollectGarbageAtSafepoint(bool, bool, long long, long long) pages.cc:1105 (dart:x86_64+0x1009a4393)
    #5 dart::PageSpace::CollectGarbage(bool, bool) pages.cc:1043 (dart:x86_64+0x1009a4014)
    #6 dart::Heap::CollectOldSpaceGarbage(dart::Thread*, dart::Heap::GCType, dart::Heap::GCReason) heap.cc:525 (dart:x86_64+0x1009940cd)
    #7 dart::Heap::AllocateOld(long, dart::HeapPage::PageType) heap.cc:564 (dart:x86_64+0x100992cd4)
    #8 dart::Object::Allocate(long, long, dart::Heap::Space) heap.h (dart:x86_64+0x1004b5f14)
    #9 dart::Function::New(dart::String const&, dart::RawFunction::Kind, bool, bool, bool, bool, bool, dart::Object const&, dart::TokenPosition, dart::Heap::Space) object.cc:7286 (dart:x86_64+0x1004eca70)
    #10 dart::kernel::KernelLoader::LoadProcedure(dart::Library const&, dart::Class const&, bool, long) kernel_loader.cc:1923 (dart:x86_64+0x10049b4a3)
    #11 dart::kernel::KernelLoader::FinishClassLoading(dart::Class const&, dart::Library const&, dart::Class const&, long, dart::kernel::ClassIndex const&, dart::kernel::ClassHelper*) kernel_loader.cc:1705 (dart:x86_64+0x10049d311)
    #12 dart::kernel::KernelLoader::FinishLoading(dart::Class const&) kernel_loader.cc:1760 (dart:x86_64+0x10049db6c)
    #13 dart::ClassFinalizer::FinalizeClass(dart::Class const&) class_finalizer.cc:1133 (dart:x86_64+0x10037f251)
    #14 dart::ClassFinalizer::LoadClassMembers(dart::Class const&) class_finalizer.cc:1197 (dart:x86_64+0x1003809b5)
    #15 dart::Class::LookupFunctionAllowPrivate(dart::String const&, dart::Class::MemberKind) const object.cc:3635 (dart:x86_64+0x1004fce15)
    #16 dart::Class::LookupFunctionAllowPrivate(dart::String const&) const object.cc:4488 (dart:x86_64+0x1004fd384)
    #17 dart::kernel::TranslationHelper::LookupMethodByMember(dart::kernel::NameIndex, dart::String const&) kernel_translation_helper.cc:677 (dart:x86_64+0x100927444)
    #18 dart::kernel::StreamingFlowGraphBuilder::BuildMethodInvocation(dart::TokenPosition*) kernel_binary_flowgraph.cc:2752 (dart:x86_64+0x1008f6af9)
    #19 dart::kernel::StreamingFlowGraphBuilder::BuildExpression(dart::TokenPosition*) kernel_binary_flowgraph.cc:1145 (dart:x86_64+0x1008ec92e)
    #20 dart::kernel::StreamingFlowGraphBuilder::BuildArgumentsFromActualArguments(dart::Array*, bool, bool) kernel_binary_flowgraph.cc:1994 (dart:x86_64+0x1009058f9)
    #21 dart::kernel::StreamingFlowGraphBuilder::BuildStaticInvocation(bool, dart::TokenPosition*) kernel_binary_flowgraph.cc:1981 (dart:x86_64+0x1008f8230)
    #22 dart::kernel::StreamingFlowGraphBuilder::BuildExpression(dart::TokenPosition*) kernel_binary_flowgraph.cc (dart:x86_64+0x1008ec950)
    #23 dart::kernel::StreamingFlowGraphBuilder::BuildVariableDeclaration() kernel_binary_flowgraph.cc:4888 (dart:x86_64+0x100901e6e)
    #24 dart::kernel::StreamingFlowGraphBuilder::BuildExpression(dart::TokenPosition*) kernel_binary_flowgraph.cc:3715 (dart:x86_64+0x1008ecb31)
    #25 dart::kernel::StreamingFlowGraphBuilder::BuildYieldStatement() kernel_binary_flowgraph.cc:4817 (dart:x86_64+0x100901698)
    #26 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1287 (dart:x86_64+0x1008ef353)
    #27 dart::kernel::StreamingFlowGraphBuilder::BuildBlock() kernel_binary_flowgraph.cc:3926 (dart:x86_64+0x1008fc105)
    #28 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1253 (dart:x86_64+0x1008ef31f)
    #29 dart::kernel::StreamingFlowGraphBuilder::BuildIfStatement() kernel_binary_flowgraph.cc:4513 (dart:x86_64+0x1008ff920)
    #30 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1279 (dart:x86_64+0x1008ef312)
    #31 dart::kernel::StreamingFlowGraphBuilder::BuildBlock() kernel_binary_flowgraph.cc:3926 (dart:x86_64+0x1008fc105)
    #32 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1253 (dart:x86_64+0x1008ef31f)
    #33 dart::kernel::StreamingFlowGraphBuilder::BuildIfStatement() kernel_binary_flowgraph.cc:4513 (dart:x86_64+0x1008ff920)
    #34 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1279 (dart:x86_64+0x1008ef312)
    #35 dart::kernel::StreamingFlowGraphBuilder::BuildIfStatement() kernel_binary_flowgraph.cc:4517 (dart:x86_64+0x1008ff964)
    #36 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1279 (dart:x86_64+0x1008ef312)
    #37 dart::kernel::StreamingFlowGraphBuilder::BuildBlock() kernel_binary_flowgraph.cc:3926 (dart:x86_64+0x1008fc105)
    #38 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1253 (dart:x86_64+0x1008ef31f)
    #39 dart::kernel::StreamingFlowGraphBuilder::BuildTryCatch() kernel_binary_flowgraph.cc:4581 (dart:x86_64+0x1008fff07)
    #40 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1283 (dart:x86_64+0x1008ef3d1)
    #41 dart::kernel::StreamingFlowGraphBuilder::BuildBlock() kernel_binary_flowgraph.cc:3926 (dart:x86_64+0x1008fc105)
    #42 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1253 (dart:x86_64+0x1008ef31f)
    #43 dart::kernel::StreamingFlowGraphBuilder::BuildLabeledStatement() kernel_binary_flowgraph.cc:4044 (dart:x86_64+0x1008fc96e)
    #44 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1261 (dart:x86_64+0x1008ef32c)
    #45 dart::kernel::StreamingFlowGraphBuilder::BuildBlock() kernel_binary_flowgraph.cc:3926 (dart:x86_64+0x1008fc105)
    #46 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1253 (dart:x86_64+0x1008ef31f)
    #47 dart::kernel::StreamingFlowGraphBuilder::BuildTryCatch() kernel_binary_flowgraph.cc:4581 (dart:x86_64+0x1008fff07)
    #48 dart::kernel::StreamingFlowGraphBuilder::BuildStatement() kernel_binary_flowgraph.cc:1283 (dart:x86_64+0x1008ef3d1)
    #49 dart::kernel::StreamingFlowGraphBuilder::BuildFunctionBody(dart::Function const&, dart::LocalVariable*, bool) kernel_binary_flowgraph.cc:711 (dart:x86_64+0x1008f1be2)
    #50 dart::kernel::StreamingFlowGraphBuilder::BuildGraphOfFunction(bool) kernel_binary_flowgraph.cc:833 (dart:x86_64+0x1008f247e)
    #51 dart::kernel::StreamingFlowGraphBuilder::BuildGraph() kernel_binary_flowgraph.cc:996 (dart:x86_64+0x1008f2cb9)
    #52 dart::kernel::FlowGraphBuilder::BuildGraph() kernel_to_il.cc:648 (dart:x86_64+0x1009115f2)
    #53 dart::DartCompilationPipeline::BuildFlowGraph(dart::Zone*, dart::ParsedFunction*, dart::ZoneGrowableArray<dart::ICData const*>*, long, bool) compiler.cc:146 (dart:x86_64+0x10095d4fd)
    #54 dart::CompileParsedFunctionHelper::Compile(dart::CompilationPipeline*) compiler.cc:586 (dart:x86_64+0x10095f2a9)
    #55 dart::CompileFunctionHelper(dart::CompilationPipeline*, dart::Function const&, bool, long) compiler.cc:769 (dart:x86_64+0x1009609d7)
    #56 dart::Compiler::CompileFunction(dart::Thread*, dart::Function const&) compiler.cc:911 (dart:x86_64+0x1009603e6)
    #57 dart::DRT_CompileFunction(dart::NativeArguments) compiler.cc:245 (dart:x86_64+0x10095dd25)
    #58 <null> <null> (0x000112901108)
    #59 dart::DartLibraryCalls::HandleMessage(dart::Object const&, dart::Instance const&) dart_entry.cc:35 (dart:x86_64+0x1003f4811)
    #60 dart::IsolateMessageHandler::HandleMessage(std::__1::unique_ptr<dart::Message, std::__1::default_delete<dart::Message> >) isolate.cc:823 (dart:x86_64+0x10045cf20)
    #61 dart::MessageHandler::HandleMessages(dart::MonitorLocker*, bool, bool) message_handler.cc:227 (dart:x86_64+0x1004a6a85)
    #62 dart::MessageHandler::TaskCallback() message_handler.cc:438 (dart:x86_64+0x1004a7805)
    #63 dart::MessageHandlerTask::Run() message_handler.cc:30 (dart:x86_64+0x1004a8a21)
    #64 dart::ThreadPool::Worker::Loop() thread_pool.cc:380 (dart:x86_64+0x1006ae43d)
    #65 dart::ThreadPool::Worker::Main(unsigned long) thread_pool.cc:435 (dart:x86_64+0x1006ae1b5)
    #66 dart::ThreadStart(void*) os_thread_macos.cc:111 (dart:x86_64+0x1005b15a8)

SUMMARY: ThreadSanitizer: thread leak os_thread_macos.cc:130 in dart::OSThread::Start(char const*, void (*)(unsigned long), unsigned long)

@rmacnak-google
Copy link
Contributor

What test do you see this leak in? I do not expect a leak here, since Dart_Cleanup will join all ThreadPool threads before returning.

@chinmaygarde
Copy link
Member Author

This is gen_snapshot generating one of the intermediates for the build.

@chinmaygarde chinmaygarde merged commit 02c4bdf into flutter:master Oct 10, 2019
@chinmaygarde chinmaygarde deleted the CanLaunchAndShutdownMultipleTimes branch October 10, 2019 01:13
engine-flutter-autoroll added a commit to flutter/flutter that referenced this pull request Oct 10, 2019
git@github.com:flutter/engine.git/compare/eb7abf28e439...46b2e3d

git log eb7abf2..46b2e3d --no-merges --oneline
2019-10-10 skia-flutter-autoroll@skia.org Roll src/third_party/skia 76826fc91c0a..fe23b1de9ed0 (4 commits) (flutter/engine#13050)
2019-10-10 chinmaygarde@google.com Ignore thread leaks from Dart VM in tsan instrumented builds. (flutter/engine#13049)


If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC chinmaygarde@google.com on the revert to ensure that a human
is aware of the problem.

To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md
Inconnu08 pushed a commit to Inconnu08/flutter that referenced this pull request Nov 26, 2019
git@github.com:flutter/engine.git/compare/eb7abf28e439...46b2e3d

git log eb7abf2..46b2e3d --no-merges --oneline
2019-10-10 skia-flutter-autoroll@skia.org Roll src/third_party/skia 76826fc91c0a..fe23b1de9ed0 (4 commits) (flutter/engine#13050)
2019-10-10 chinmaygarde@google.com Ignore thread leaks from Dart VM in tsan instrumented builds. (flutter/engine#13049)


If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC chinmaygarde@google.com on the revert to ensure that a human
is aware of the problem.

To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants