diff --git a/patch/patch.cfg b/patch/patch.cfg index 5a5db6d76..e80d7c79c 100644 --- a/patch/patch.cfg +++ b/patch/patch.cfg @@ -56,6 +56,12 @@ patches = [ 'name': 'power_monitor_642', 'path': '../base/power_monitor/', }, + { + # Force child processes to exit on main process termination. + # http://code.google.com/p/chromiumembedded/issues/detail?id=1011 + 'name': 'sandbox_1011', + 'path': '../content/common/', + }, { # Fix crash on 10.6 when building with the 10.7 SDK # http://code.google.com/p/chromiumembedded/issues/detail?id=1026 diff --git a/patch/patches/sandbox_1011.patch b/patch/patches/sandbox_1011.patch new file mode 100644 index 000000000..5e7683d9c --- /dev/null +++ b/patch/patches/sandbox_1011.patch @@ -0,0 +1,23 @@ +Index: sandbox_win.cc +=================================================================== +--- sandbox_win.cc (revision 211613) ++++ sandbox_win.cc (working copy) +@@ -586,8 +586,17 @@ + cmd_line->AppendArg(base::StringPrintf("/prefetch:%d", base::Hash(type_str))); + + if (!in_sandbox) { ++ base::LaunchOptions options = base::LaunchOptions(); + base::ProcessHandle process = 0; +- base::LaunchProcess(*cmd_line, base::LaunchOptions(), &process); ++ ++ static HANDLE hJobObject = NULL; ++ if (!hJobObject) { ++ hJobObject = CreateJobObject(NULL, NULL); ++ base::SetJobObjectAsKillOnJobClose(hJobObject); ++ } ++ options.job_handle = hJobObject; ++ ++ base::LaunchProcess(*cmd_line, options, &process); + g_broker_services->AddTargetPeer(process); + return process; + }