| Index: base/process/process_win.cc
|
| diff --git a/base/process/process_win.cc b/base/process/process_win.cc
|
| index d72dd49c9d69196861d0e0e89929b339cdf5c0c0..0d312a3599088eabf4bc2043a5f875b6d1f9d019 100644
|
| --- a/base/process/process_win.cc
|
| +++ b/base/process/process_win.cc
|
| @@ -32,6 +32,9 @@ Process::Process(RValue other)
|
| other.object->Close();
|
| }
|
|
|
| +Process::~Process() {
|
| +}
|
| +
|
| Process& Process::operator=(RValue other) {
|
| if (this != other.object) {
|
| process_.Set(other.object->process_.Take());
|
| @@ -123,10 +126,17 @@ void Process::Close() {
|
| process_.Close();
|
| }
|
|
|
| -bool Process::Terminate(int result_code, bool wait) const {
|
| +bool Process::Terminate(int exit_code, bool wait) const {
|
| DCHECK(IsValid());
|
| - // TODO(rvargas) crbug/417532: Move the implementation here.
|
| - return KillProcess(Handle(), result_code, wait);
|
| + bool result = (::TerminateProcess(Handle(), exit_code) != FALSE);
|
| + if (result && wait) {
|
| + // The process may not end immediately due to pending I/O
|
| + if (::WaitForSingleObject(Handle(), 60 * 1000) != WAIT_OBJECT_0)
|
| + DPLOG(ERROR) << "Error waiting for process exit";
|
| + } else if (!result) {
|
| + DPLOG(ERROR) << "Unable to terminate process";
|
| + }
|
| + return result;
|
| }
|
|
|
| bool Process::WaitForExit(int* exit_code) {
|
|
|