Linux shutdown hang due to blocked libsecret tasks |
||
Issue descriptionLinux (reports dbe2361c00298ca9, 0a33f48b5a21a443, 91389545b53ad328): These all have SchedulerWorker threads "stuck" in libsecret keyring unlock tasks. Example stack: 0x00007f52a289674d (libc-2.23.so + 0x000fb74d ) __poll 0x00007f52a65ea38b (libglib-2.0.so.0.4800.2 + 0x0004a38b ) 0x00007f52a65ea711 (libglib-2.0.so.0.4800.2 + 0x0004a711 ) 0x00007f527c3ec531 (libsecret-1.so.0.0.0 + 0x00018531 ) 0x00007f527c3ec874 (libsecret-1.so.0.0.0 + 0x00018874 ) 0x000055a3ccbcac27 (chrome -libsecret_util_linux.cc:78 ) <name omitted> 0x000055a3ccbca17b (chrome -key_storage_libsecret.cc:79 ) KeyStorageLibsecret::GetKeyImpl() 0x000055a3ccbc9747 (chrome -key_storage_linux.cc:104 ) KeyStorageLinux::WaitForInitOnTaskRunner() 0x000055a3ccbc96d8 (chrome -memory:2286 ) KeyStorageLinux::CreateService(os_crypt::Config const&) 0x00007f5272c34fe8 (Cookies + 0x00007fe8 ) 0x000055a3ccbc995e (chrome -key_storage_linux.cc:130 ) KeyStorageLinux::GetKey() 0x000055a3cf8929fb (chrome -tcmalloc.cc ) tc_malloc 0x000055a3ccbc91e2 (chrome -os_crypt_linux.cc:100 ) (anonymous namespace)::GetPasswordV11() 0x000055a3ccbc8928 (chrome -os_crypt_linux.cc:118 ) OSCrypt::DecryptString(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) 0x00007f52a86c64c8 (libpthread-2.23.so + 0x000104c8 ) __write_nocancel 0x000055a3cb8dc46f (chrome -message_pump_libevent.cc:271 ) base::MessagePumpLibevent::ScheduleWork() 0x000055a3cb8d9f26 (chrome -incoming_task_queue.cc:86 ) base::internal::IncomingTaskQueue::AddToIncomingQueue(base::Location const&, base::OnceCallback<void ()>, base::TimeDelta, base::Nestable) 0x000055a3ccbd3da2 (chrome -sqlite_persistent_cookie_store.cc:108 ) net::SQLitePersistentCookieStore::Backend::LoadCookiesForDomains(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) 0x000055a3ccbd592a (chrome -sqlite_persistent_cookie_store.cc:567 ) net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&) 0x000055a3cac16367 (chrome -web_request_api.cc:1918 ) extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*) 0x000055a3cab82461 (chrome -rules_cache_delegate.cc:133 ) extensions::RulesCacheDelegate::CheckIfReady() 0x000055a3cab81e94 (chrome -rules_cache_delegate.cc:94 ) extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*) 0x000055a3cf8928ff (chrome -malloc_hook-inl.h:313 ) sbrk 0x000055a3cb8db3a8 (chrome -message_loop_task_runner.cc:31 ) base::internal::MessageLoopTaskRunner::PostDelayedTask(base::Location const&, base::OnceCallback<void ()>, base::TimeDelta) 0x000055a3ca55d9be (chrome -browser_thread_impl.cc:289 ) content::BrowserThread::PostDelayedTask(content::BrowserThread::ID, base::Location const&, base::OnceCallback<void ()>, base::TimeDelta) 0x000055a3ca55ddd0 (chrome -browser_thread_impl.cc:40 ) content::(anonymous namespace)::BrowserThreadTaskRunner::PostDelayedTask(base::Location const&, base::OnceCallback<void ()>, base::TimeDelta) 0x000055a3ccbd3e63 (chrome -sqlite_persistent_cookie_store.cc:908 ) net::SQLitePersistentCookieStore::Backend::LoadCookiesForDomains(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) 0x000055a3ccbd3da2 (chrome -sqlite_persistent_cookie_store.cc:108 ) net::SQLitePersistentCookieStore::Backend::LoadCookiesForDomains(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) 0x000055a3cb950100 (chrome -vector:1599 ) base::(anonymous namespace)::ParseVersionNumbers(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >*) 0x000055a3ccbd3860 (chrome -sqlite_persistent_cookie_store.cc:835 ) net::SQLitePersistentCookieStore::Backend::ChainLoadCookies(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&) 0x000055a3cb8e23e2 (chrome -histogram.cc:233 ) base::Histogram::Factory::Build() 0x000055a3cb8e2b23 (chrome -new:236 ) base::Histogram::FactoryTimeGet(char const*, base::TimeDelta, base::TimeDelta, unsigned int, int) 0x00007ffcb7fdcead (linux-gate.so + 0x00000ead ) 0x000055a3cb8ec125 (chrome -sample_vector.cc:41 ) base::SampleVectorBase::Accumulate(int, int) 0x000055a3ccbd1b33 (chrome -sqlite_persistent_cookie_store.cc:603 ) net::SQLitePersistentCookieStore::Backend::LoadAndNotifyInBackground(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&, base::Time const&) 0x000055a3cb82516f (chrome -ssl_error_assistant_component_installer.cc:49 ) (anonymous namespace)::LoadProtoFromDisk(base::FilePath const&) 0x000055a3cb8be107 (chrome -callback.h:95 ) base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) 0x000055a3ccbd592a (chrome -sqlite_persistent_cookie_store.cc:567 ) net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&) 0x000055a3cac16367 (chrome -web_request_api.cc:1918 ) extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*) 0x000055a3cab82461 (chrome -rules_cache_delegate.cc:133 ) extensions::RulesCacheDelegate::CheckIfReady() 0x000055a3cab81e94 (chrome -rules_cache_delegate.cc:94 ) extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*) 0x000055a3cb91af03 (chrome -task_tracker.cc:478 ) base::internal::TaskTracker::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) 0x000055a3ccbd592a (chrome -sqlite_persistent_cookie_store.cc:567 ) net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&) 0x000055a3cb8f32ee (chrome -pending_task.cc:20 ) base::PendingTask::PendingTask(base::PendingTask&&) 0x000055a3cb91b842 (chrome -task_tracker_posix.cc:23 ) base::internal::TaskTrackerPosix::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) 0x000055a3ccbd592a (chrome -sqlite_persistent_cookie_store.cc:567 ) net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&) 0x000055a3cac16367 (chrome -web_request_api.cc:1918 ) extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*) 0x000055a3cab82461 (chrome -rules_cache_delegate.cc:133 ) extensions::RulesCacheDelegate::CheckIfReady() 0x000055a3cab81e94 (chrome -rules_cache_delegate.cc:94 ) extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*) 0x000055a3cb91a6fe (chrome -task_tracker.cc:371 ) base::internal::TaskTracker::RunAndPopNextTask(scoped_refptr<base::internal::Sequence>, base::internal::CanScheduleSequenceObserver*) 0x000055a3ccbd592a (chrome -sqlite_persistent_cookie_store.cc:567 ) net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&) 0x000055a3cac16367 (chrome -web_request_api.cc:1918 ) extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*) 0x000055a3cab82461 (chrome -rules_cache_delegate.cc:133 ) extensions::RulesCacheDelegate::CheckIfReady() 0x000055a3cab81e94 (chrome -rules_cache_delegate.cc:94 ) extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*) 0x000055a3ccbd592a (chrome -sqlite_persistent_cookie_store.cc:567 ) net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&) 0x000055a3cac16367 (chrome -web_request_api.cc:1918 ) extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*) 0x000055a3cab82461 (chrome -rules_cache_delegate.cc:133 ) extensions::RulesCacheDelegate::CheckIfReady() 0x000055a3cab81e94 (chrome -rules_cache_delegate.cc:94 ) extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*) 0x000055a3cb917996 (chrome -memory:2286 ) base::internal::SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::GetWork(base::internal::SchedulerWorker*) 0x000055a3cb91587c (chrome -scheduler_worker.cc:85 ) base::internal::SchedulerWorker::Thread::ThreadMain() 0x000055a3cb951bbd (chrome + 0x0360cbbd ) operator new(unsigned long) 0x000055a3cb9262fb (chrome -lock_impl.h:70 ) base::ThreadIdNameManager::RegisterThread(unsigned long, int) 0x000055a3cb923fe2 (chrome -platform_thread_posix.cc:76 ) base::(anonymous namespace)::ThreadFunc(void*) 0x00007f52a86bd6b9 (libpthread-2.23.so + 0x000076b9 ) start_thread 0x00007f52a28a241c (libc-2.23.so + 0x0010741c ) clone
,
May 8 2018
It looks like the calls to Keyring block, because either it's locked or faulty. The hang is expected. If the user does not react to the system prompt to unlock their keyring, then we cannot proceed safely. We risk that encrypted data may get destroyed. If a user is asking for a solution, we recommend that they simply unlock their keyring. When a user is unable to unlock their Keyring for a technical reason, they can run Chrome with --password-store=basic, which will bypass Keyring. It is not recommended unless really necessary, because encrypted data may be destroyed and new data will not be encrypted.
,
May 8 2018
Re #2: As noted on the other bug, this specific crash is due to the task blocking shutdown - is there any reason that the browser shouldn't shutdown while one of these tasks is pending? If not then let's move the task to a non-shutdown-blocking Sequence. |
||
►
Sign in to add a comment |
||
Comment 1 by w...@chromium.org
, May 8 2018