ae1e26bddd
If you navigated to a page that used the HTML Application Cache, you'd see a hang on quit with a backtrace like so: + 2825 content::ContentMain(int, char const**, content::ContentMainDelegate*) (in libchromiumcontent.dylib) + 64 [0xb33190] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0x96b261 [0xb34261] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0x96a409 [0xb33409] + 2825 content::BrowserMain(content::MainFunctionParams const&) (in libchromiumcontent.dylib) + 200 [0x14290b8] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0x1265426 [0x142e426] + 2825 content::BrowserMainLoop::~BrowserMainLoop() (in libchromiumcontent.dylib) + 17 [0x14294a1] + 2825 content::BrowserMainLoop::~BrowserMainLoop() (in libchromiumcontent.dylib) + 357 [0x1429625] + 2825 brightray::BrowserMainParts::~BrowserMainParts() (in ) + 70 [0x68df6] + 2825 scoped_ptr<brightray::BrowserContext, base::DefaultDeleter<brightray::BrowserContext> >::~scoped_ptr() (in ) + 23 [0x68ff7] + 2825 scoped_ptr<brightray::BrowserContext, base::DefaultDeleter<brightray::BrowserContext> >::~scoped_ptr() (in ) + 23 [0x69297] + 2825 base::internal::scoped_ptr_impl<brightray::BrowserContext, base::DefaultDeleter<brightray::BrowserContext> >::~scoped_ptr_impl() (in ) + 23 [0x692b7] + 2825 base::internal::scoped_ptr_impl<brightray::BrowserContext, base::DefaultDeleter<brightray::BrowserContext> >::~scoped_ptr_impl() (in ) + 50 [0x692f2] + 2825 base::DefaultDeleter<brightray::BrowserContext>::operator()(brightray::BrowserContext*) const (in ) + 46 [0x6916e] + 2825 brightray::BrowserContext::~BrowserContext() (in ) + 127 [0x672bf] + 2825 base::SupportsUserData::~SupportsUserData() (in libchromiumcontent.dylib) + 57 [0xccc019] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0xb03230 [0xccc230] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0xb0324e [0xccc24e] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0x14c4239 [0x168d239] + 2825 content::StoragePartitionImpl::~StoragePartitionImpl() (in libchromiumcontent.dylib) + 17 [0x16899a1] + 2825 content::StoragePartitionImpl::~StoragePartitionImpl() (in libchromiumcontent.dylib) + 491 [0x1689bab] + 2825 content::ChromeAppCacheService::DeleteOnCorrectThread() const (in libchromiumcontent.dylib) + 66 [0x1424f32] + 2825 content::ChromeAppCacheService::~ChromeAppCacheService() (in libchromiumcontent.dylib) + 50 [0x1424e32] + 2825 appcache::AppCacheService::~AppCacheService() (in libchromiumcontent.dylib) + 301 [0x2b8ad2d] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0x29c9b81 [0x2b92b81] + 2825 ??? (in libchromiumcontent.dylib) load address 0x1c9000 + 0x29c9da4 [0x2b92da4] + 2825 appcache::AppCacheDiskCache::~AppCacheDiskCache() (in libchromiumcontent.dylib) + 17 [0x2b78c71] + 2825 appcache::AppCacheDiskCache::~AppCacheDiskCache() (in libchromiumcontent.dylib) + 135 [0x2b78d17] + 2825 disk_cache::BackendImpl::~BackendImpl() (in libchromiumcontent.dylib) + 17 [0x25979a1] + 2825 disk_cache::BackendImpl::~BackendImpl() (in libchromiumcontent.dylib) + 305 [0x2597af1] + 2825 base::WaitableEvent::Wait() (in libchromiumcontent.dylib) + 50 [0xccd942] + 2825 base::WaitableEvent::TimedWait(base::TimeDelta const&) (in libchromiumcontent.dylib) + 347 [0xccdb3b] + 2825 base::ConditionVariable::Wait() (in libchromiumcontent.dylib) + 35 [0xcccbb3] + 2825 pthread_cond_wait$UNIX2003 (in libsystem_c.dylib) + 71 [0x964d3089] + 2825 _pthread_cond_wait (in libsystem_c.dylib) + 833 [0x9644d280] + 2825 __psynch_cvwait (in libsystem_kernel.dylib) + 10 [0x94b8e8e2] BackendImpl was waiting on BrowserThread::CACHE, but that thread had already been stopped. The solution is to destroy the BrowserContext before threads have been stopped. We now do this in BrowserMainParts::PostMainMessageLoopRun, which matches content_shell. |
||
---|---|---|
.. | ||
mac | ||
media | ||
win | ||
browser_client.cc | ||
browser_client.h | ||
browser_context.cc | ||
browser_context.h | ||
browser_main_parts.cc | ||
browser_main_parts.h | ||
browser_main_parts_mac.mm | ||
default_web_contents_delegate.cc | ||
default_web_contents_delegate.h | ||
default_web_contents_delegate_mac.mm | ||
devtools_ui.cc | ||
devtools_ui.h | ||
download_manager_delegate.cc | ||
download_manager_delegate.h | ||
inspectable_web_contents.cc | ||
inspectable_web_contents.h | ||
inspectable_web_contents_impl.cc | ||
inspectable_web_contents_impl.h | ||
inspectable_web_contents_view.h | ||
inspectable_web_contents_view_mac.h | ||
inspectable_web_contents_view_mac.mm | ||
network_delegate.cc | ||
network_delegate.h | ||
notification_presenter.h | ||
notification_presenter_mac.h | ||
notification_presenter_mac.mm | ||
url_request_context_getter.cc | ||
url_request_context_getter.h | ||
web_ui_controller_factory.cc | ||
web_ui_controller_factory.h |