Chromium Code Reviews| Index: base/test/launcher/test_launcher.cc |
| diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc |
| index 56ed4a27024bd95cfcd87a237a46fe54c9d9be0b..bc477b7f59f30ec6203e0013570ab5446c2d7ae3 100644 |
| --- a/base/test/launcher/test_launcher.cc |
| +++ b/base/test/launcher/test_launcher.cc |
| @@ -49,6 +49,7 @@ namespace base { |
| int LaunchChildTestProcessWithOptions(const CommandLine& command_line, |
| const LaunchOptions& options, |
| bool use_job_objects, |
| + bool allow_breakaway, |
| base::TimeDelta timeout, |
| bool* was_timeout); |
| @@ -224,6 +225,7 @@ void DoLaunchChildTestProcess( |
| const CommandLine& command_line, |
| base::TimeDelta timeout, |
| bool use_job_objects, |
| + bool allow_breakaway, |
| bool redirect_stdio, |
| scoped_refptr<MessageLoopProxy> message_loop_proxy, |
| const TestLauncher::LaunchChildGTestProcessCallback& callback) { |
| @@ -275,7 +277,8 @@ void DoLaunchChildTestProcess( |
| bool was_timeout = false; |
| int exit_code = LaunchChildTestProcessWithOptions( |
| - command_line, options, use_job_objects, timeout, &was_timeout); |
| + command_line, options, use_job_objects, allow_breakaway, |
| + timeout, &was_timeout); |
| if (redirect_stdio) { |
| #if defined(OS_WIN) |
| @@ -410,6 +413,7 @@ void TestLauncher::LaunchChildGTestProcess( |
| const std::string& wrapper, |
| base::TimeDelta timeout, |
| bool use_job_objects, |
| + bool allow_breakaway, |
| const LaunchChildGTestProcessCallback& callback) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -428,6 +432,7 @@ void TestLauncher::LaunchChildGTestProcess( |
| new_command_line, |
| timeout, |
| use_job_objects, |
| + allow_breakaway, |
| redirect_stdio, |
| MessageLoopProxy::current(), |
| Bind(&TestLauncher::OnLaunchTestProcessFinished, |
| @@ -1005,6 +1010,7 @@ CommandLine PrepareCommandLineForGTest(const CommandLine& command_line, |
| int LaunchChildTestProcessWithOptions(const CommandLine& command_line, |
| const LaunchOptions& options, |
| bool use_job_objects, |
| + bool allow_breakaway, |
| base::TimeDelta timeout, |
| bool* was_timeout) { |
| #if defined(OS_POSIX) |
| @@ -1025,12 +1031,16 @@ int LaunchChildTestProcessWithOptions(const CommandLine& command_line, |
| return -1; |
| } |
| + DWORD flags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; |
| + |
| // Allow break-away from job since sandbox and few other places rely on it |
| // on Windows versions prior to Windows 8 (which supports nested jobs). |
| // TODO(phajdan.jr): Do not allow break-away on Windows 8. |
| - if (!SetJobObjectLimitFlags(job_handle.Get(), |
| - JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE | |
| - JOB_OBJECT_LIMIT_BREAKAWAY_OK)) { |
| + if (allow_breakaway) { |
|
sky
2014/08/06 17:58:49
nit: no {}
Paweł Hajdan Jr.
2014/08/07 12:17:41
Done.
|
| + flags |= JOB_OBJECT_LIMIT_BREAKAWAY_OK; |
| + } |
| + |
| + if (!SetJobObjectLimitFlags(job_handle.Get(), flags)) { |
| LOG(ERROR) << "Could not SetJobObjectLimitFlags."; |
| return -1; |
| } |