From 912445b6db66140aecb3bc822075a6e9bb9d7e33 Mon Sep 17 00:00:00 2001 From: "agl@chromium.org" Date: Fri, 1 May 2009 20:56:41 +0000 Subject: Revert "POSIX: Don't allow onunload handlers to hang a renderer forever." This reverts commit r15025. Calling exit() on another thread meant V8's destructor functions got called while another thread was still in V8. I might not have a better plan, but it's making a mess of the valgrind builders so I'm reverting for now with an eye to landing again next week. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15095 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/common/ipc_channel_proxy.cc | 3 --- chrome/common/ipc_channel_proxy.h | 4 ---- chrome/renderer/render_thread.cc | 27 --------------------------- chrome/renderer/render_thread.h | 5 ----- 4 files changed, 39 deletions(-) (limited to 'chrome') diff --git a/chrome/common/ipc_channel_proxy.cc b/chrome/common/ipc_channel_proxy.cc index c43f01f..47aa89b 100644 --- a/chrome/common/ipc_channel_proxy.cc +++ b/chrome/common/ipc_channel_proxy.cc @@ -81,9 +81,6 @@ void ChannelProxy::Context::OnChannelConnected(int32 peer_pid) { // Called on the IPC::Channel thread void ChannelProxy::Context::OnChannelError() { - for (size_t i = 0; i < filters_.size(); ++i) - filters_[i]->OnChannelError(); - // See above comment about using listener_message_loop_ here. listener_message_loop_->PostTask(FROM_HERE, NewRunnableMethod( this, &Context::OnDispatchError)); diff --git a/chrome/common/ipc_channel_proxy.h b/chrome/common/ipc_channel_proxy.h index 42cb865..2263ea6 100644 --- a/chrome/common/ipc_channel_proxy.h +++ b/chrome/common/ipc_channel_proxy.h @@ -64,10 +64,6 @@ class ChannelProxy : public Message::Sender { // have received the internal Hello message from the peer. virtual void OnChannelConnected(int32 peer_pid) {} - // Called when there is an error on the channel, typically that the channel - // has been closed. - virtual void OnChannelError() {} - // Called to inform the filter that the IPC channel will be destroyed. // OnFilterRemoved is called immediately after this. virtual void OnChannelClosing() {} diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 5b4dac1..26836ca 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -103,28 +103,6 @@ static WebAppCacheContext* CreateAppCacheContextForRenderer() { return new AppCacheContextImpl(RenderThread::current()); } -#if defined(OS_POSIX) -class SuicideOnChannelErrorFilter : public IPC::ChannelProxy::MessageFilter { - void OnChannelError() { - // On POSIX, at least, one can install an unload handler which loops - // forever and leave behind a renderer process which eats 100% CPU forever. - // - // This is because the terminate signals (ViewMsg_ShouldClose and the error - // from the IPC channel) are routed to the main message loop but never - // processed (because that message loop is stuck in V8). - // - // One could make the browser SIGKILL the renderers, but that leaves open a - // large window where a browser failure (or a user, manually terminating - // the browser because "it's stuck") will leave behind a process eating all - // the CPU. - // - // So, we install a filter on the channel so that we can process this event - // here and kill the process. - exit(0); - } -}; -#endif - void RenderThread::Init() { #if defined(OS_WIN) // If you are running plugins in this thread you need COM active but in @@ -146,11 +124,6 @@ void RenderThread::Init() { WebAppCacheContext::SetFactory(CreateAppCacheContextForRenderer); devtools_agent_filter_ = new DevToolsAgentFilter(); AddFilter(devtools_agent_filter_.get()); - -#if defined(OS_POSIX) - suicide_on_channel_error_filter_ = new SuicideOnChannelErrorFilter; - AddFilter(suicide_on_channel_error_filter_.get()); -#endif } void RenderThread::CleanUp() { diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h index 44e20e9..d50fd96 100644 --- a/chrome/renderer/render_thread.h +++ b/chrome/renderer/render_thread.h @@ -160,11 +160,6 @@ class RenderThread : public RenderThreadBase, scoped_refptr devtools_agent_filter_; -#if defined(OS_POSIX) - scoped_refptr - suicide_on_channel_error_filter_; -#endif - // If true, then a GetPlugins call is allowed to rescan the disk. bool plugin_refresh_allowed_; -- cgit v1.1