diff options
author | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-24 22:09:58 +0000 |
---|---|---|
committer | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-24 22:09:58 +0000 |
commit | 50faca730337e5145c58b9a8852be735433c8d77 (patch) | |
tree | e4dab2a083c8836c0a5f1e1ce8f7b5e2e7c2255b /base/process_util_posix.cc | |
parent | 31f23a35436b79adee1c094f7aa37867496ebd07 (diff) | |
download | chromium_src-50faca730337e5145c58b9a8852be735433c8d77.zip chromium_src-50faca730337e5145c58b9a8852be735433c8d77.tar.gz chromium_src-50faca730337e5145c58b9a8852be735433c8d77.tar.bz2 |
POSIX: Don't spawn zombies.
TEST=Navigate to several different sites and check that no Chrome zombies are roaming around.
BUG=9401
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14488 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/process_util_posix.cc')
-rw-r--r-- | base/process_util_posix.cc | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc index 562b8e9..87abbb8 100644 --- a/base/process_util_posix.cc +++ b/base/process_util_posix.cc @@ -140,13 +140,24 @@ void RaiseProcessToHighPriority() { // setpriority() or sched_getscheduler, but these all require extra rights. } -bool DidProcessCrash(ProcessHandle handle) { +bool DidProcessCrash(bool* child_exited, ProcessHandle handle) { int status; - if (waitpid(handle, &status, WNOHANG)) { - // I feel like dancing! + const int result = waitpid(handle, &status, WNOHANG); + if (result == -1) { + LOG(ERROR) << "waitpid failed with errno:" << errno; + if (child_exited) + *child_exited = false; + return false; + } else if (result == 0) { + // the child hasn't exited yet. + if (child_exited) + *child_exited = false; return false; } + if (child_exited) + *child_exited = true; + if (WIFSIGNALED(status)) { switch(WTERMSIG(status)) { case SIGSEGV: |