OLD | NEW |
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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 // A non joinable thread has been created. The thread will either terminate | 102 // A non joinable thread has been created. The thread will either terminate |
103 // the process or will be terminated by the process. Therefore, keep the | 103 // the process or will be terminated by the process. Therefore, keep the |
104 // delegate object alive for the lifetime of the process. | 104 // delegate object alive for the lifetime of the process. |
105 WaitAndExitDelegate* leaking_delegate = delegate.release(); | 105 WaitAndExitDelegate* leaking_delegate = delegate.release(); |
106 ANNOTATE_LEAKING_OBJECT_PTR(leaking_delegate); | 106 ANNOTATE_LEAKING_OBJECT_PTR(leaking_delegate); |
107 ignore_result(leaking_delegate); | 107 ignore_result(leaking_delegate); |
108 return true; | 108 return true; |
109 } | 109 } |
110 #endif | 110 #endif |
111 | 111 |
112 class SuicideOnChannelErrorFilter : public IPC::ChannelProxy::MessageFilter { | 112 class SuicideOnChannelErrorFilter : public IPC::MessageFilter { |
113 public: | 113 public: |
114 // IPC::ChannelProxy::MessageFilter | 114 // IPC::MessageFilter |
115 virtual void OnChannelError() OVERRIDE { | 115 virtual void OnChannelError() OVERRIDE { |
116 // For renderer/worker processes: | 116 // For renderer/worker processes: |
117 // On POSIX, at least, one can install an unload handler which loops | 117 // On POSIX, at least, one can install an unload handler which loops |
118 // forever and leave behind a renderer process which eats 100% CPU forever. | 118 // forever and leave behind a renderer process which eats 100% CPU forever. |
119 // | 119 // |
120 // This is because the terminate signals (ViewMsg_ShouldClose and the error | 120 // This is because the terminate signals (ViewMsg_ShouldClose and the error |
121 // from the IPC channel) are routed to the main message loop but never | 121 // from the IPC channel) are routed to the main message loop but never |
122 // processed (because that message loop is stuck in V8). | 122 // processed (because that message loop is stuck in V8). |
123 // | 123 // |
124 // One could make the browser SIGKILL the renderers, but that leaves open a | 124 // One could make the browser SIGKILL the renderers, but that leaves open a |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 // inflight that would addref it. | 533 // inflight that would addref it. |
534 Send(new ChildProcessHostMsg_ShutdownRequest); | 534 Send(new ChildProcessHostMsg_ShutdownRequest); |
535 } | 535 } |
536 | 536 |
537 void ChildThread::EnsureConnected() { | 537 void ChildThread::EnsureConnected() { |
538 VLOG(0) << "ChildThread::EnsureConnected()"; | 538 VLOG(0) << "ChildThread::EnsureConnected()"; |
539 base::KillProcess(base::GetCurrentProcessHandle(), 0, false); | 539 base::KillProcess(base::GetCurrentProcessHandle(), 0, false); |
540 } | 540 } |
541 | 541 |
542 } // namespace content | 542 } // namespace content |
OLD | NEW |