For go/mustash (out-of-process ash on chrome os) I'm trying to bring up browser_tests --mash. I'm seeing a bunch of AtExit crashes related to task manager. For example:
browser_tests --mash --gtest_filter=TaskManagerBrowserTest.*
...test passes, then sometimes...
[76987:76987:1116/173225.294586:FATAL:at_exit.cc(63)] Check failed: !g_top_manager->processing_callbacks_.
#0 0x7ff61eb1a8ad base::debug::StackTrace::StackTrace()
#1 0x7ff61eb18e2c base::debug::StackTrace::StackTrace()
#2 0x7ff61eb9db6d logging::LogMessage::~LogMessage()
#3 0x7ff61eac2666 base::AtExitManager::RegisterTask()
#4 0x7ff61eac250f base::AtExitManager::RegisterCallback()
#5 0x000005b88085 base::Singleton<>::get()
#6 0x000005b87199 task_manager::WebContentsTagsManager::GetInstance()
#7 0x000005b8bded task_manager::WebContentsTaskProvider::StopUpdating()
#8 0x000005b8b139 task_manager::WebContentsTaskProvider::~WebContentsTaskProvider()
#9 0x000005b8b179 task_manager::WebContentsTaskProvider::~WebContentsTaskProvider()
#10 0x000000d9d18c std::__1::__vector_base<>::~__vector_base()
#11 0x0000060493f5 std::__1::vector<>::~vector()
#12 0x000006037839 task_manager::TaskManagerImpl::~TaskManagerImpl()
#13 0x00000604ccb9 base::LazyInstanceTraitsBase<>::CallDestructor()
#14 0x00000604cc95 base::internal::DestructorAtExitLazyInstanceTraits<>::Delete()
#15 0x00000604cb45 base::LazyInstance<>::OnExit()
#16 0x7ff61eac5ea5 _ZN4base8internal13FunctorTraitsIPFvPvEvE6InvokeIJRKS2_EEEvS4_DpOT_
#17 0x7ff61eac5e40 _ZN4base8internal12InvokeHelperILb0EvE8MakeItSoIRKPFvPvEJRKS4_EEEvOT_DpOT0_
#18 0x7ff61eac5e00 _ZN4base8internal7InvokerINS0_9BindStateIPFvPvEJS3_EEEFvvEE7RunImplIRKS5_RKNSt3__15tupleIJS3_EEEJLm0EEEEvOT_OT0_NSC_16integer_sequenceImJXspT1_EEEE
#19 0x7ff61eac5d1c _ZN4base8internal7InvokerINS0_9BindStateIPFvPvEJS3_EEEFvvEE3RunEPNS0_13BindStateBaseE
#20 0x7ff61eac2a3d _ZNKR4base17RepeatingCallbackIFvvEE3RunEv
#21 0x7ff61eac2358 base::AtExitManager::ProcessCallbacksNow()
#22 0x7ff61eac2191 base::AtExitManager::~AtExitManager()
#23 0x0000054fcdb5 base::TestSuite::~TestSuite()
#24 0x0000054758d5 content::ContentTestSuiteBase::~ContentTestSuiteBase()
#25 0x00000547570d ChromeTestSuite::~ChromeTestSuite()
It looks like TaskManagerImpl is a lazy instance that requests destruction at shutdown:
https://cs.chromium.org/chromium/src/chrome/browser/task_manager/sampling/task_manager_impl.cc?q=taskmanagerimpl&sq=package:chromium&l=41
But it uses WebContentsTagsManager, which is a base::Singleton, during destruction:
https://cs.chromium.org/chromium/src/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc?sq=package:chromium&l=463
https://cs.chromium.org/chromium/src/chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.cc?q=webcontentstagsmana&sq=package:chromium&l=16
I'm guessing WebContentsTagsManager is sometimes destroyed first, then ~WebContentsTaskProvider tries to recreate it. Regardless, it seems bad to have multiple singletons trying to access each other at shutdown.
+some task manager owners. Ideas? Do these objects have to be singletons? Could they be owned by some other object? Leaked at shutdown?
Comment 1 by ovanieva@chromium.org
, Nov 21 2017Status: Assigned (was: Untriaged)