New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 786230 link

Starred by 1 user

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 2
Type: Bug

Blocked on:
issue 858920



Sign in to add a comment

Crashes in TaskManagerBrowserTest accessing WebContentsTagsManager during AtExitManager cleanup

Project Member Reported by jamescook@chromium.org, Nov 17 2017

Issue description

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?

 
Owner: afakhry@chromium.org
Status: Assigned (was: Untriaged)
Components: -Internals>MUS Internals>Services>WindowService
Components: -Internals>Services>WindowService Internals>Services>Ash
Labels: -Proj-Mustash-Mash

Comment 4 by kbr@chromium.org, Jun 29 2018

Blockedon: 858920

Sign in to add a comment