Index: base/process_util_posix.cc |
diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc |
index c0e792bb13e153743ea823da494b3c445709cae3..b846e5fbb44378311cb202bc0c7e430efd54f984 100644 |
--- a/base/process_util_posix.cc |
+++ b/base/process_util_posix.cc |
@@ -17,6 +17,7 @@ |
#include <set> |
#include "base/basictypes.h" |
+#include "base/eintr_wrappers.h" |
#include "base/logging.h" |
#include "base/platform_thread.h" |
#include "base/process_util.h" |
@@ -69,7 +70,7 @@ bool KillProcess(ProcessHandle process_id, int exit_code, bool wait) { |
int tries = 60; |
// The process may not end immediately due to pending I/O |
while (tries-- > 0) { |
- int pid = waitpid(process_id, NULL, WNOHANG); |
+ int pid = HANDLE_EINTR(waitpid(process_id, NULL, WNOHANG)); |
if (pid == process_id) |
break; |
@@ -139,10 +140,7 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) { |
if (saved_fds.find(fd) != saved_fds.end()) |
continue; |
- int result; |
- do { |
- result = close(fd); |
- } while (result == -1 && errno == EINTR); |
+ HANDLE_EINTR(close(fd)); |
} |
return; |
} |
@@ -161,10 +159,7 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) { |
if (saved_fds.find(fd) != saved_fds.end()) |
continue; |
- int result; |
- do { |
- result = close(fd); |
- } while (result == -1 && errno == EINTR); |
+ HANDLE_EINTR(close(fd)); |
} |
} |
@@ -226,7 +221,7 @@ void RaiseProcessToHighPriority() { |
bool DidProcessCrash(bool* child_exited, ProcessHandle handle) { |
int status; |
- const int result = waitpid(handle, &status, WNOHANG); |
+ const int result = HANDLE_EINTR(waitpid(handle, &status, WNOHANG)); |
if (result == -1) { |
LOG(ERROR) << "waitpid failed pid:" << handle << " errno:" << errno; |
if (child_exited) |
@@ -262,11 +257,9 @@ bool DidProcessCrash(bool* child_exited, ProcessHandle handle) { |
bool WaitForExitCode(ProcessHandle handle, int* exit_code) { |
int status; |
- while (waitpid(handle, &status, 0) == -1) { |
- if (errno != EINTR) { |
- NOTREACHED(); |
- return false; |
- } |
+ if (HANDLE_EINTR(waitpid(handle, &status, 0)) == -1) { |
+ NOTREACHED(); |
+ return false; |
} |
if (WIFEXITED(status)) { |
@@ -305,7 +298,7 @@ int WaitpidWithTimeout(ProcessHandle handle, int wait_milliseconds, |
// This function is used primarily for unit tests, if we want to use it in |
// the application itself it would probably be best to examine other routes. |
int status = -1; |
- pid_t ret_pid = waitpid(handle, &status, WNOHANG); |
+ pid_t ret_pid = HANDLE_EINTR(waitpid(handle, &status, WNOHANG)); |
static const int64 kQuarterSecondInMicroseconds = kMicrosecondsPerSecond/4; |
// If the process hasn't exited yet, then sleep and try again. |
@@ -325,7 +318,7 @@ int WaitpidWithTimeout(ProcessHandle handle, int wait_milliseconds, |
// usleep() will return 0 and set errno to EINTR on receipt of a signal |
// such as SIGCHLD. |
usleep(sleep_time_usecs); |
- ret_pid = waitpid(handle, &status, WNOHANG); |
+ ret_pid = HANDLE_EINTR(waitpid(handle, &status, WNOHANG)); |
} |
if (success) |
@@ -340,7 +333,7 @@ bool WaitForSingleProcess(ProcessHandle handle, int wait_milliseconds) { |
bool waitpid_success; |
int status; |
if (wait_milliseconds == base::kNoTimeout) |
- waitpid_success = (waitpid(handle, &status, 0) != -1); |
+ waitpid_success = (HANDLE_EINTR(waitpid(handle, &status, 0)) != -1); |
else |
status = WaitpidWithTimeout(handle, wait_milliseconds, &waitpid_success); |
if (status != -1) { |
@@ -463,16 +456,13 @@ bool GetAppOutput(const CommandLine& cl, std::string* output) { |
char buffer[256]; |
std::string buf_output; |
- ssize_t bytes_read = 0; |
while (true) { |
- bytes_read = read(pipe_fd[0], buffer, sizeof(buffer)); |
- if (bytes_read == 0) |
- break; |
- if (bytes_read == -1 && errno != EINTR) |
+ ssize_t bytes_read = |
+ HANDLE_EINTR(read(pipe_fd[0], buffer, sizeof(buffer))); |
+ if (bytes_read <= 0) |
break; |
- if (bytes_read > 0) |
- buf_output.append(buffer, bytes_read); |
+ buf_output.append(buffer, bytes_read); |
} |
output->swap(buf_output); |
close(pipe_fd[0]); |