Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: content/child/child_thread.cc

Issue 324143002: Decouple IPC::MessageFilter from IPC::Channel (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Landing Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/child_thread.h" 5 #include "content/child/child_thread.h"
6 6
7 #include <signal.h> 7 #include <signal.h>
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 113
114 class SuicideOnChannelErrorFilter : public IPC::MessageFilter { 114 class SuicideOnChannelErrorFilter : public IPC::MessageFilter {
115 public: 115 public:
116 // IPC::MessageFilter 116 // IPC::MessageFilter
117 virtual void OnChannelError() OVERRIDE { 117 virtual void OnChannelError() OVERRIDE {
118 // For renderer/worker processes: 118 // For renderer/worker processes:
119 // On POSIX, at least, one can install an unload handler which loops 119 // On POSIX, at least, one can install an unload handler which loops
120 // forever and leave behind a renderer process which eats 100% CPU forever. 120 // forever and leave behind a renderer process which eats 100% CPU forever.
121 // 121 //
122 // This is because the terminate signals (ViewMsg_ShouldClose and the error 122 // This is because the terminate signals (ViewMsg_ShouldClose and the error
123 // from the IPC channel) are routed to the main message loop but never 123 // from the IPC sender) are routed to the main message loop but never
124 // processed (because that message loop is stuck in V8). 124 // processed (because that message loop is stuck in V8).
125 // 125 //
126 // One could make the browser SIGKILL the renderers, but that leaves open a 126 // One could make the browser SIGKILL the renderers, but that leaves open a
127 // large window where a browser failure (or a user, manually terminating 127 // large window where a browser failure (or a user, manually terminating
128 // the browser because "it's stuck") will leave behind a process eating all 128 // the browser because "it's stuck") will leave behind a process eating all
129 // the CPU. 129 // the CPU.
130 // 130 //
131 // So, we install a filter on the channel so that we can process this event 131 // So, we install a filter on the sender so that we can process this event
132 // here and kill the process. 132 // here and kill the process.
133 // TODO(earthdok): Re-enable on CrOS http://crbug.com/360622 133 // TODO(earthdok): Re-enable on CrOS http://crbug.com/360622
134 #if (defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) || \ 134 #if (defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) || \
135 defined(THREAD_SANITIZER)) && !defined(OS_CHROMEOS) 135 defined(THREAD_SANITIZER)) && !defined(OS_CHROMEOS)
136 // Some sanitizer tools rely on exit handlers (e.g. to run leak detection, 136 // Some sanitizer tools rely on exit handlers (e.g. to run leak detection,
137 // or dump code coverage data to disk). Instead of exiting the process 137 // or dump code coverage data to disk). Instead of exiting the process
138 // immediately, we give it 60 seconds to run exit handlers. 138 // immediately, we give it 60 seconds to run exit handlers.
139 CHECK(CreateWaitAndExitThread(base::TimeDelta::FromSeconds(60))); 139 CHECK(CreateWaitAndExitThread(base::TimeDelta::FromSeconds(60)));
140 #if defined(LEAK_SANITIZER) 140 #if defined(LEAK_SANITIZER)
141 // Invoke LeakSanitizer early to avoid detecting shutdown-only leaks. If 141 // Invoke LeakSanitizer early to avoid detecting shutdown-only leaks. If
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 base::MessageLoop::current()->SetTimerSlack(timer_slack); 561 base::MessageLoop::current()->SetTimerSlack(timer_slack);
562 562
563 #ifdef OS_WIN 563 #ifdef OS_WIN
564 // Windows Vista+ has a fancy process backgrounding mode that can only be set 564 // Windows Vista+ has a fancy process backgrounding mode that can only be set
565 // from within the process. 565 // from within the process.
566 base::Process::Current().SetProcessBackgrounded(background); 566 base::Process::Current().SetProcessBackgrounded(background);
567 #endif // OS_WIN 567 #endif // OS_WIN
568 } 568 }
569 569
570 } // namespace content 570 } // namespace content
OLDNEW
« no previous file with comments | « content/child/child_histogram_message_filter.cc ('k') | content/common/font_cache_dispatcher_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698