summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-01 20:56:41 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-01 20:56:41 +0000
commit912445b6db66140aecb3bc822075a6e9bb9d7e33 (patch)
tree03494f511cbe131db3862fedd9e0158ae8e9ce9a /chrome
parent8321a3750c190dc9eeaf75d1bfff9269e8b1846c (diff)
downloadchromium_src-912445b6db66140aecb3bc822075a6e9bb9d7e33.zip
chromium_src-912445b6db66140aecb3bc822075a6e9bb9d7e33.tar.gz
chromium_src-912445b6db66140aecb3bc822075a6e9bb9d7e33.tar.bz2
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
Diffstat (limited to 'chrome')
-rw-r--r--chrome/common/ipc_channel_proxy.cc3
-rw-r--r--chrome/common/ipc_channel_proxy.h4
-rw-r--r--chrome/renderer/render_thread.cc27
-rw-r--r--chrome/renderer/render_thread.h5
4 files changed, 0 insertions, 39 deletions
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<DevToolsAgentFilter> devtools_agent_filter_;
-#if defined(OS_POSIX)
- scoped_refptr<IPC::ChannelProxy::MessageFilter>
- suicide_on_channel_error_filter_;
-#endif
-
// If true, then a GetPlugins call is allowed to rescan the disk.
bool plugin_refresh_allowed_;