diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-04 20:57:58 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-04 20:57:58 +0000 |
commit | 076bf0b69eafa42accb20e5ccfe23805ed91655d (patch) | |
tree | 9db5d60018d0b35a87a87549ae82614e8b0f3e21 /base | |
parent | 07c00d99969c6584079c78a2e31cb0d5ad5beda7 (diff) | |
download | chromium_src-076bf0b69eafa42accb20e5ccfe23805ed91655d.zip chromium_src-076bf0b69eafa42accb20e5ccfe23805ed91655d.tar.gz chromium_src-076bf0b69eafa42accb20e5ccfe23805ed91655d.tar.bz2 |
Make UITest::CrashAwareSleep portable.
Review URL: http://codereview.chromium.org/40119
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10916 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/process_util.h | 4 | ||||
-rw-r--r-- | base/process_util_posix.cc | 24 | ||||
-rw-r--r-- | base/process_util_win.cc | 5 |
3 files changed, 29 insertions, 4 deletions
diff --git a/base/process_util.h b/base/process_util.h index 11c5e12..0f074b1 100644 --- a/base/process_util.h +++ b/base/process_util.h @@ -180,6 +180,10 @@ bool WaitForProcessesToExit(const std::wstring& executable_name, bool WaitForSingleProcess(ProcessHandle handle, int wait_milliseconds); +// Returns true when |wait_milliseconds| have elapsed and the process +// is still running. +bool CrashAwareSleep(ProcessHandle handle, int wait_milliseconds); + // Waits a certain amount of time (can be 0) for all the processes with a given // executable name to exit, then kills off any of them that are still around. // If filter is non-null, then only processes selected by the filter are waited diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc index e8845fb..453316d 100644 --- a/base/process_util_posix.cc +++ b/base/process_util_posix.cc @@ -182,7 +182,9 @@ bool WaitForExitCode(ProcessHandle handle, int* exit_code) { return false; } -bool WaitForSingleProcess(ProcessHandle handle, int wait_milliseconds) { +namespace { + +int WaitpidWithTimeout(ProcessHandle handle, int wait_milliseconds) { // This POSIX version of this function only guarantees that we wait no less // than |wait_milliseconds| for the proces to exit. The child process may // exit sometime before the timeout has ended but we may still block for @@ -228,11 +230,25 @@ bool WaitForSingleProcess(ProcessHandle handle, int wait_milliseconds) { ret_pid = waitpid(handle, &status, WNOHANG); } - if (status != -1) { + return status; +} + +} // namespace + +bool WaitForSingleProcess(ProcessHandle handle, int wait_milliseconds) { + int status = WaitpidWithTimeout(handle, wait_milliseconds); + if (status != -1) return WIFEXITED(status); - } else { + else + return false; +} + +bool CrashAwareSleep(ProcessHandle handle, int wait_milliseconds) { + int status = WaitpidWithTimeout(handle, wait_milliseconds); + if (status != -1) + return !(WIFEXITED(status) || WIFSIGNALED(status)); + else return false; - } } namespace { diff --git a/base/process_util_win.cc b/base/process_util_win.cc index 0ed5d86..9829a41 100644 --- a/base/process_util_win.cc +++ b/base/process_util_win.cc @@ -353,6 +353,11 @@ bool WaitForSingleProcess(ProcessHandle handle, int wait_milliseconds) { return retval; } +bool CrashAwareSleep(ProcessHandle handle, int wait_milliseconds) { + bool retval = WaitForSingleObject(handle, wait_milliseconds) == WAIT_TIMEOUT; + return retval; +} + bool CleanupProcesses(const std::wstring& executable_name, int wait_milliseconds, int exit_code, |