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

Side by Side Diff: chrome/browser/child_process_launcher.cc

Issue 3386014: This adds some plumbing for propagating the status and error code of a (Closed)
Patch Set: Fixed Mac code to handle both SEGV and BUS Created 10 years, 2 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/child_process_launcher.h" 5 #include "chrome/browser/child_process_launcher.h"
6 6
7 #include <utility> // For std::pair. 7 #include <utility> // For std::pair.
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lock.h" 10 #include "base/lock.h"
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 301
302 bool ChildProcessLauncher::IsStarting() { 302 bool ChildProcessLauncher::IsStarting() {
303 return context_->starting_; 303 return context_->starting_;
304 } 304 }
305 305
306 base::ProcessHandle ChildProcessLauncher::GetHandle() { 306 base::ProcessHandle ChildProcessLauncher::GetHandle() {
307 DCHECK(!context_->starting_); 307 DCHECK(!context_->starting_);
308 return context_->process_.handle(); 308 return context_->process_.handle();
309 } 309 }
310 310
311 bool ChildProcessLauncher::DidProcessCrash() { 311 base::TerminationStatus ChildProcessLauncher::GetChildTerminationStatus(
312 bool did_crash, child_exited; 312 int* exit_code) {
313 base::TerminationStatus status;
313 base::ProcessHandle handle = context_->process_.handle(); 314 base::ProcessHandle handle = context_->process_.handle();
314 #if defined(OS_LINUX) 315 #if defined(OS_LINUX)
315 if (context_->zygote_) { 316 if (context_->zygote_) {
316 did_crash = Singleton<ZygoteHost>()->DidProcessCrash(handle, &child_exited); 317 status = Singleton<ZygoteHost>()->GetTerminationStatus(handle,
318 exit_code);
317 } else 319 } else
318 #endif 320 #endif
319 { 321 {
320 did_crash = base::DidProcessCrash(&child_exited, handle); 322 status = base::GetTerminationStatus(handle, exit_code);
321 } 323 }
322 324
323 // POSIX: If the process crashed, then the kernel closed the socket for it 325 // POSIX: If the process crashed, then the kernel closed the socket
324 // and so the child has already died by the time we get here. Since 326 // for it and so the child has already died by the time we get
325 // DidProcessCrash called waitpid with WNOHANG, it'll reap the process. 327 // here. Since GetTerminationStatus called waitpid with WNOHANG,
326 // However, if DidProcessCrash didn't reap the child, we'll need to in 328 // it'll reap the process. However, if GetTerminationStatus didn't
329 // reap the child (because it was still running), we'll need to
327 // Terminate via ProcessWatcher. So we can't close the handle here. 330 // Terminate via ProcessWatcher. So we can't close the handle here.
328 if (child_exited) 331 if (status != base::TERMINATION_STATUS_STILL_RUNNING)
329 context_->process_.Close(); 332 context_->process_.Close();
330 333
331 return did_crash; 334 return status;
332 } 335 }
333 336
334 void ChildProcessLauncher::SetProcessBackgrounded(bool background) { 337 void ChildProcessLauncher::SetProcessBackgrounded(bool background) {
335 DCHECK(!context_->starting_); 338 DCHECK(!context_->starting_);
336 context_->process_.SetProcessBackgrounded(background); 339 context_->process_.SetProcessBackgrounded(background);
337 } 340 }
OLDNEW
« no previous file with comments | « chrome/browser/child_process_launcher.h ('k') | chrome/browser/child_process_security_policy_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698