summaryrefslogtreecommitdiffstats
path: root/base/process_util_posix.cc
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-24 22:09:58 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-24 22:09:58 +0000
commit50faca730337e5145c58b9a8852be735433c8d77 (patch)
treee4dab2a083c8836c0a5f1e1ce8f7b5e2e7c2255b /base/process_util_posix.cc
parent31f23a35436b79adee1c094f7aa37867496ebd07 (diff)
downloadchromium_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.cc17
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: