New issue
Advanced search Search tips

Issue 648736 link

Starred by 4 users

Issue metadata

Status: Archived
Owner: ----
Closed: Jan 10
Cc:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug



Sign in to add a comment

Chrome can be stuck in a boot loop if the renderer process fail to start.

Project Member Reported by sebmarchand@chromium.org, Sep 20 2016

Issue description

It seems that Chrome can easily be stuck in a crash loop if something prevent the renderer processes to start (e.g. an incompatible third party module), instead of giving up on starting a renderer process Chrome keeps retrying and generates a crash report each time.

There's (at least) 2 reasons for this

The first one is that the observers of the RenderProcessHostImpl instance owning this crashing renderer get a notification when it fails[1], and some of them then try to restart a new one. E.g. here's the crash stack that try to automatically restart the renderer of a forced extension:

BackgroundContentsService::RestartForceInstalledExtensionOnCrash+0x219 [\src\chrome\browser\background\background_contents_service.cc @ 562]
BackgroundContentsService::Observe+0x314 [\src\chrome\browser\background\background_contents_service.cc @ 449]
content::NotificationServiceImpl::Notify+0x2d7 [\src\content\browser\notification_service_impl.cc @ 130]
extensions::ExtensionHost::RenderProcessGone+0x5f [\src\extensions\browser\extension_host.cc @ 286]
content::WebContentsImpl::RenderViewTerminated+0xf3 [\src\content\browser\web_contents\web_contents_impl.cc @ 4285]
content::RenderViewHostImpl::RenderProcessExited+0x59 [\src\content\browser\renderer_host\render_view_host_impl.cc @ 626]
content::RenderProcessHostImpl::ProcessDied+0x35e [\src\content\browser\renderer_host\render_process_host_impl.cc @ 2644]


The second has something to do with the fact that the ProxyResolver starts a renderer during its initialization:

content::ChildProcessLauncher::Launch [\src\content\browser\child_process_launcher.cc @ 434]
content::ChildProcessLauncher::ChildProcessLauncher+0xb1 [\src\content\browser\child_process_launcher.cc @ 418]
content::BrowserChildProcessHostImpl::Launch+0x20a [\src\content\browser\browser_child_process_host_impl.cc @ 260]
content::UtilityProcessHostImpl::StartProcess+0x4e5 [\src\content\browser\utility_process_host_impl.cc @ 351]
UtilityProcessMojoProxyResolverFactory::CreateProcessAndConnect+0x110 [\src\chrome\browser\net\utility_process_mojo_proxy_resolver_factory.cc @ 56]
UtilityProcessMojoProxyResolverFactory::CreateResolver+0x43 [\src\chrome\browser\net\utility_process_mojo_proxy_resolver_factory.cc @ 77]
net::ProxyResolverFactoryMojo::Job::Job+0x382 [\src\net\proxy\proxy_resolver_factory_mojo.cc @ 341]
net::ProxyResolverFactoryMojo::CreateProxyResolver+0xc8 [\src\net\proxy\proxy_resolver_factory_mojo.cc @ 402]
net::ProxyService::InitProxyResolver::DoCreateResolver+0xb1 [\src\net\proxy\proxy_service.cc @ 536]
net::ProxyService::InitProxyResolver::DoLoop+0x161 [\src\net\proxy\proxy_service.cc @ 499]
net::ProxyService::InitProxyResolver::StartSkipDecider+0xa5 [\src\net\proxy\proxy_service.cc @ 445]
net::ProxyService::InitializeUsingDecidedConfig+0x1ba [\src\net\proxy\proxy_service.cc @ 1653]
base::Callback<void __cdecl(int,net::ProxyResolverScriptData *,net::ProxyConfig const &),1>::Run+0x1a [\src\base\callback.h @ 61]
net::ProxyService::ProxyScriptDeciderPoller::NotifyProxyServiceOfChange+0x24 [\src\net\proxy\proxy_service.cc @ 749]
base::internal::FunctorTraits<void (__cdecl net::ProxyService::ProxyScriptDeciderPoller::*)(int,scoped_refptr<net::ProxyResolverScriptData> const &,net::ProxyConfig const &),void>::Invoke+0x24 [\src\base\bind_internal.h @ 214]
base::internal::InvokeHelper<1,void>::MakeItSo+0x4a [\src\base\bind_internal.h @ 304]
base::internal::Invoker<base::internal::BindState<void (__cdecl net::ProxyService::ProxyScriptDeciderPoller::*)...>::RunImpl+0x4a [\src\base\bind_internal.h @ 347]
base::internal::Invoker<base::internal::BindState<void (__cdecl net::ProxyService::ProxyScriptDeciderPoller::*)...>::Run+0x5b [\src\base\bind_internal.h @ 329]
base::Callback<void __cdecl(void),1>::Run+0x7 [\src\base\callback.h @ 61]

This task is triggered by the following stack:

net::ProxyService::ProxyScriptDeciderPoller::OnProxyScriptDeciderCompleted [\src\net\proxy\proxy_service.cc @ 697]
base::Callback<void __cdecl(int),1>::Run+0x10 [\src\base\callback.h @ 61]
net::ProxyScriptDecider::DoCallback+0x10 [\src\net\proxy\proxy_script_decider.cc @ 222]
net::ProxyScriptDecider::OnIOCompletion+0x40 [\src\net\proxy\proxy_script_decider.cc @ 173]
base::Callback<void __cdecl(int),1>::Run+0xe [\src\base\callback.h @ 61]
net::ProxyScriptFetcherImpl::FetchCompleted+0x1d0 [\src\net\proxy\proxy_script_fetcher_impl.cc @ 317]
net::ProxyScriptFetcherImpl::OnResponseCompleted+0x1d [\src\net\proxy\proxy_script_fetcher_impl.cc @ 115]
net::ProxyScriptFetcherImpl::ConsumeBytesRead+0x34 [\src\net\proxy\proxy_script_fetcher_impl.cc @ 272]
net::ProxyScriptFetcherImpl::ReadBody+0x34 [\src\net\proxy\proxy_script_fetcher_impl.cc @ 262]
net::ProxyScriptFetcherImpl::OnReadCompleted+0x28 [\src\net\proxy\proxy_script_fetcher_impl.cc @ 250]
net::URLRequestJob::ReadRawDataComplete+0xfd [\src\net\url_request\url_request_job.cc @ 580]
net::URLRequestHttpJob::OnReadCompleted+0xa5 [\src\net\url_request\url_request_http_job.cc @ 1054]
base::Callback<void __cdecl(int),1>::Run+0x15 [\src\base\callback.h @ 61]
net::HttpNetworkTransaction::DoCallback+0x3f [\src\net\http\http_network_transaction.cc @ 631]
net::HttpNetworkTransaction::OnIOComplete+0x1d [\src\net\http\http_network_transaction.cc @ 637]
base::Callback<void __cdecl(int),1>::Run+0xb [\src\base\callback.h @ 61]
net::SpdyHttpStream::DoResponseCallback+0x4a [\src\net\spdy\spdy_http_stream.cc @ 580]
net::SpdyHttpStream::DoBufferedReadCallback+0x136 [\src\net\spdy\spdy_http_stream.cc @ 550]
net::SpdyHttpStream::OnClose+0x215 [\src\net\spdy\spdy_http_stream.cc @ 403]
net::SpdyStream::OnClose+0x2c [\src\net\spdy\spdy_stream.cc @ 651]
net::SpdySession::DeleteStream+0xd3 [\src\net\spdy\spdy_session.cc @ 1897]
net::SpdySession::CloseActiveStreamIterator+0x11f [\src\net\spdy\spdy_session.cc @ 1227]
net::SpdySession::CloseActiveStream+0x4f [\src\net\spdy\spdy_session.cc @ 1161]
net::SpdyStream::OnDataReceived+0x27d [\src\net\spdy\spdy_stream.cc @ 520]
net::SpdySession::OnStreamEnd+0x1c6 [\src\net\spdy\spdy_session.cc @ 2080]
net::SpdyFramer::ProcessFramePadding+0xfd [\src\net\spdy\spdy_framer.cc @ 2294]
net::SpdyFramer::ProcessInput+0xfc [\src\net\spdy\spdy_framer.cc @ 716]
net::BufferedSpdyFramer::ProcessInput+0xf [\src\net\spdy\buffered_spdy_framer.cc @ 300]
net::SpdySession::DoReadComplete+0x18c [\src\net\spdy\spdy_session.cc @ 1382]
net::SpdySession::DoReadLoop+0xd6 [\src\net\spdy\spdy_session.cc @ 1307]
net::SpdySession::PumpReadLoop+0x141 [\src\net\spdy\spdy_session.cc @ 1282]
base::internal::FunctorTraits<void (__cdecl content::PushMessagingMessageFilter::*)(int,enum content::PushUnregistrationStatus),void>::Invoke+0x21 [\src\base\bind_internal.h @ 214]
base::internal::InvokeHelper<1,void>::MakeItSo+0x4b [\src\base\bind_internal.h @ 304]
base::internal::Invoker<base::internal::BindState<void (__cdecl content::PushMessagingMessageFilter::*)(int,enum content::PushUnregistrationStatus),base::WeakPtr<content::PushMessagingMessageFilter>,int,enum content::PushUnregistrationStatus>,void __cdecl(void)>::RunImpl+0x4b [\src\base\bind_internal.h @ 347]
base::internal::Invoker<base::internal::BindState<void (__cdecl content::PushMessagingMessageFilter::*)(int,enum content::PushUnregistrationStatus) __ptr64,base::WeakPtr<content::PushMessagingMessageFilter>,int,enum content::PushUnregistrationStatus>,void __cdecl(void)>::Run+0x54 [\src\base\bind_internal.h @ 329]
base::Callback<void __cdecl(void),1>::Run+0x7 [\src\base\callback.h @ 61]
base::debug::TaskAnnotator::RunTask+0x193 [\src\base\debug\task_annotator.cc @ 56]
base::MessageLoop::RunTask+0x468 [\src\base\message_loop\message_loop.cc @ 489]
base::MessageLoop::DeferOrRunPendingTask+0x50 [\src\base\message_loop\message_loop.cc @ 497]
base::MessageLoop::DoWork+0x455 [\src\base\message_loop\message_loop.cc @ 621]
base::MessagePumpForIO::DoRunLoop+0x147 [\src\base\message_loop\message_pump_win.cc @ 727]
base::MessagePumpWin::Run+0x54 [\src\base\message_loop\message_pump_win.cc @ 142]
base::MessageLoop::RunHandler+0x15 [\src\base\message_loop\message_loop.cc @ 451]
base::RunLoop::Run+0xed [\src\base\run_loop.cc @ 36]
content::BrowserThreadImpl::IOThreadRun+0x36 [\src\content\browser\browser_thread_impl.cc @ 244]
content::BrowserThreadImpl::Run+0x94 [\src\content\browser\browser_thread_impl.cc @ 278]
base::Thread::ThreadMain+0x202 [\src\base\threading\thread.cc @ 304]
base::`anonymous namespace'::ThreadFunc+0x199 [\src\base\threading\platform_thread_win.cc @ 84]

(I thought that SPDY had been deprecated in M51?).

I don't know anything about SPDY of anything in net in general, so it's not clear to me what's causing this.

[1] https://cs.chromium.org/chromium/src/content/browser/renderer_host/render_process_host_impl.cc?dr=C&q=RenderProcessHostImpl::ProcessDied&sq=package:chromium&l=2668
 
Status: Archived (was: Untriaged)
Archiving P3s older than 1 year with no owner or component.

Sign in to add a comment