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

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

Issue 19231006: chrome: respect --child-clean-exit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Made comments better. Created 7 years, 5 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/browser/child_process_launcher.h" 5 #include "content/browser/child_process_launcher.h"
6 6
7 #include <utility> // For std::pair. 7 #include <utility> // For std::pair.
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 client_->OnProcessLaunched(); 332 client_->OnProcessLaunched();
333 } else { 333 } else {
334 Terminate(); 334 Terminate();
335 } 335 }
336 } 336 }
337 337
338 void Terminate() { 338 void Terminate() {
339 if (!process_.handle()) 339 if (!process_.handle())
340 return; 340 return;
341 341
342 if (!terminate_child_on_shutdown_) 342 if (CommandLine::ForCurrentProcess()->
343 return; 343 HasSwitch(switches::kWaitForChildrenBeforeExiting))
344 344 // When --wait-for-children-before-exiting is provided on the command
345 // On Posix, EnsureProcessTerminated can lead to 2 seconds of sleep! So 345 // line, we want the UI thread to wait for the zygote to exit before
346 // don't this on the UI/IO threads. 346 // proceeding with the rest of the shut down.
347 BrowserThread::PostTask( 347 TerminateAndWaitForExit(zygote_, process_.handle());
348 BrowserThread::PROCESS_LAUNCHER, FROM_HERE, 348 else
349 base::Bind( 349 // On Posix, EnsureProcessTerminated can lead to 2 seconds of sleep! So
350 &Context::TerminateInternal, 350 // don't this on the UI/IO threads.
351 BrowserThread::PostTask(
352 BrowserThread::PROCESS_LAUNCHER, FROM_HERE,
353 base::Bind(
354 &Context::TerminateInternal,
351 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 355 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
352 zygote_, 356 zygote_,
353 #endif 357 #endif
354 process_.handle())); 358 process_.handle()));
355 process_.set_handle(base::kNullProcessHandle); 359 process_.set_handle(base::kNullProcessHandle);
356 } 360 }
357 361
358 static void SetProcessBackgrounded(base::ProcessHandle handle, 362 static void SetProcessBackgrounded(base::ProcessHandle handle,
359 bool background) { 363 bool background) {
360 base::Process process(handle); 364 base::Process process(handle);
361 process.SetProcessBackgrounded(background); 365 process.SetProcessBackgrounded(background);
362 } 366 }
363 367
368 static void TerminateAndWaitForExit(
369 bool zygote,
370 base::ProcessHandle handle) {
371 base::Process process(handle);
372 if (zygote) {
373 while(ZygoteHostImpl::GetInstance()->GetTerminationStatus(
374 handle,
375 false,
376 NULL) == base::TERMINATION_STATUS_STILL_RUNNING)
377 sleep(2);
378 }
379 process.Close();
380 }
381
364 static void TerminateInternal( 382 static void TerminateInternal(
365 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 383 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
366 bool zygote, 384 bool zygote,
367 #endif 385 #endif
368 base::ProcessHandle handle) { 386 base::ProcessHandle handle) {
369 #if defined(OS_ANDROID) 387 #if defined(OS_ANDROID)
370 LOG(INFO) << "ChromeProcess: Stopping process with handle " << handle; 388 LOG(INFO) << "ChromeProcess: Stopping process with handle " << handle;
371 StopChildProcess(handle); 389 StopChildProcess(handle);
372 #else 390 #else
373 base::Process process(handle); 391 base::Process process(handle);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 GetHandle(), background)); 511 GetHandle(), background));
494 } 512 }
495 513
496 void ChildProcessLauncher::SetTerminateChildOnShutdown( 514 void ChildProcessLauncher::SetTerminateChildOnShutdown(
497 bool terminate_on_shutdown) { 515 bool terminate_on_shutdown) {
498 if (context_.get()) 516 if (context_.get())
499 context_->set_terminate_child_on_shutdown(terminate_on_shutdown); 517 context_->set_terminate_child_on_shutdown(terminate_on_shutdown);
500 } 518 }
501 519
502 } // namespace content 520 } // namespace content
OLDNEW
« no previous file with comments | « content/app/content_main_runner.cc ('k') | content/browser/renderer_host/render_process_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698