| Index: chrome/browser/zygote_main_linux.cc
|
| diff --git a/chrome/browser/zygote_main_linux.cc b/chrome/browser/zygote_main_linux.cc
|
| index fada72fa338e29c9a38dc0ab1e5eee122dc0b6c2..16ccc50557ead61233d3e91ead3bc492efecaabb 100644
|
| --- a/chrome/browser/zygote_main_linux.cc
|
| +++ b/chrome/browser/zygote_main_linux.cc
|
| @@ -166,10 +166,10 @@ class Zygote {
|
| break;
|
| HandleReapRequest(fd, pickle, iter);
|
| return false;
|
| - case ZygoteHost::kCmdDidProcessCrash:
|
| + case ZygoteHost::kCmdGetTerminationStatus:
|
| if (!fds.empty())
|
| break;
|
| - HandleDidProcessCrash(fd, pickle, iter);
|
| + HandleGetTerminationStatus(fd, pickle, iter);
|
| return false;
|
| case ZygoteHost::kCmdGetSandboxStatus:
|
| HandleGetSandboxStatus(fd, pickle, iter);
|
| @@ -208,26 +208,31 @@ class Zygote {
|
| ProcessWatcher::EnsureProcessTerminated(actual_child);
|
| }
|
|
|
| - void HandleDidProcessCrash(int fd, const Pickle& pickle, void* iter) {
|
| + void HandleGetTerminationStatus(int fd, const Pickle& pickle, void* iter) {
|
| base::ProcessHandle child;
|
|
|
| if (!pickle.ReadInt(&iter, &child)) {
|
| - LOG(WARNING) << "Error parsing DidProcessCrash request from browser";
|
| + LOG(WARNING) << "Error parsing GetTerminationStatus request "
|
| + << "from browser";
|
| return;
|
| }
|
|
|
| - bool child_exited;
|
| - bool did_crash;
|
| + base::TerminationStatus status;
|
| + int exit_code;
|
| if (g_suid_sandbox_active)
|
| child = real_pids_to_sandbox_pids[child];
|
| - if (child)
|
| - did_crash = base::DidProcessCrash(&child_exited, child);
|
| - else
|
| - did_crash = child_exited = false;
|
| + if (child) {
|
| + status = base::GetTerminationStatus(child, &exit_code);
|
| + } else {
|
| + // Assume that if we can't find the child in the sandbox, then
|
| + // it terminated normally.
|
| + status = base::TERMINATION_STATUS_NORMAL_TERMINATION;
|
| + exit_code = 0;
|
| + }
|
|
|
| Pickle write_pickle;
|
| - write_pickle.WriteBool(did_crash);
|
| - write_pickle.WriteBool(child_exited);
|
| + write_pickle.WriteInt(static_cast<int>(status));
|
| + write_pickle.WriteInt(exit_code);
|
| if (HANDLE_EINTR(write(fd, write_pickle.data(), write_pickle.size())) !=
|
| write_pickle.size()) {
|
| PLOG(ERROR) << "write";
|
|
|