summaryrefslogtreecommitdiffstats
path: root/base/process_util_posix.cc
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-05 17:10:48 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-05 17:10:48 +0000
commitd3c534e7b75703e244a87b7c396d075c9a409779 (patch)
tree4192b7344906d639897cfda8cfb2064894f473f7 /base/process_util_posix.cc
parent7f4956df940f569afabef6885803d4d94f5c0a1e (diff)
downloadchromium_src-d3c534e7b75703e244a87b7c396d075c9a409779.zip
chromium_src-d3c534e7b75703e244a87b7c396d075c9a409779.tar.gz
chromium_src-d3c534e7b75703e244a87b7c396d075c9a409779.tar.bz2
GTTF: Detect browser crashes on shutdown in UI tests.
Previously the automation framework could miss a browser crash during shutdown on POSIX (on Windows there is crash_service.exe that should catch all crashes). This change makes the automation framework avoid losing information about the browser process' exit status (CrashAwareSleep), and fixes a bug in base::WaitForExitCodeWithTimeout (which on POSIX never reported the process has been signaled). Finally, it makes the automation framework use WaitForExitCodeWithTimeout instead of WaitForSingleProcess. This way we can get the exit status information in an accurate and cross-platform way. To avoid trying to close the same process handle twice (it's only an issue on Windows) I've changed WaitForExitCodeWithTimeout not to close the passed handle. It's only used in few places and I think this CL fixes all of them. I've tested this change locally on Mac with a UI test that SIGKILLs the browser. Before this change the test passed (it shouldn't), and after this change the test failed with an information that the browser has not exited cleanly. BUG=56644 Review URL: http://codereview.chromium.org/6689014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80472 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/process_util_posix.cc')
-rw-r--r--base/process_util_posix.cc22
1 files changed, 5 insertions, 17 deletions
diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc
index 6c7a9f6..26301d2 100644
--- a/base/process_util_posix.cc
+++ b/base/process_util_posix.cc
@@ -724,14 +724,15 @@ bool WaitForExitCodeWithTimeout(ProcessHandle handle, int* exit_code,
return false;
if (!waitpid_success)
return false;
- if (!WIFEXITED(status))
- return false;
if (WIFSIGNALED(status)) {
*exit_code = -1;
return true;
}
- *exit_code = WEXITSTATUS(status);
- return true;
+ if (WIFEXITED(status)) {
+ *exit_code = WEXITSTATUS(status);
+ return true;
+ }
+ return false;
}
#if defined(OS_MACOSX)
@@ -821,19 +822,6 @@ bool WaitForSingleProcess(ProcessHandle handle, int64 wait_milliseconds) {
}
}
-bool CrashAwareSleep(ProcessHandle handle, int64 wait_milliseconds) {
- bool waitpid_success;
- int status = WaitpidWithTimeout(handle, wait_milliseconds, &waitpid_success);
- if (status != -1) {
- DCHECK(waitpid_success);
- return !(WIFEXITED(status) || WIFSIGNALED(status));
- } else {
- // If waitpid returned with an error, then the process doesn't exist
- // (which most probably means it didn't exist before our call).
- return waitpid_success;
- }
-}
-
int64 TimeValToMicroseconds(const struct timeval& tv) {
static const int kMicrosecondsPerSecond = 1000000;
int64 ret = tv.tv_sec; // Avoid (int * int) integer overflow.