Index: runtime/bin/process_linux.cc |
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc |
index e2810fc6dc17a4c37f52e25ad50abdf9db371ace..844d09e4659a3005c66e9e5055e716cb91ac5474 100644 |
--- a/runtime/bin/process_linux.cc |
+++ b/runtime/bin/process_linux.cc |
@@ -16,9 +16,9 @@ |
#include <sys/wait.h> // NOLINT |
#include <unistd.h> // NOLINT |
+#include "platform/signal_blocker.h" |
#include "bin/fdutils.h" |
#include "bin/log.h" |
-#include "bin/signal_blocker.h" |
#include "bin/thread.h" |
@@ -151,7 +151,7 @@ class ExitCodeHandler { |
running_ = false; |
// Fork to wake up waitpid. |
- if (TEMP_FAILURE_RETRY_BLOCK_SIGNALS(fork()) == 0) { |
+ if (TEMP_FAILURE_RETRY(fork()) == 0) { |
exit(0); |
} |
@@ -250,7 +250,7 @@ static void ReportChildError(int exec_control_fd) { |
FDUtils::WriteToBlocking( |
exec_control_fd, os_error_message, strlen(os_error_message) + 1); |
} |
- TEMP_FAILURE_RETRY(close(exec_control_fd)); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control_fd)); |
exit(1); |
} |
@@ -274,7 +274,7 @@ int Process::Start(const char* path, |
int exec_control[2]; // Pipe to get the result from exec. |
int result; |
- result = TEMP_FAILURE_RETRY(pipe(read_in)); |
+ result = pipe(read_in); |
if (result < 0) { |
SetChildOsErrorMessage(os_error_message); |
Log::PrintErr("Error pipe creation failed: %s\n", *os_error_message); |
@@ -282,37 +282,37 @@ int Process::Start(const char* path, |
} |
FDUtils::SetCloseOnExec(read_in[0]); |
- result = TEMP_FAILURE_RETRY(pipe(read_err)); |
+ result = pipe(read_err); |
if (result < 0) { |
SetChildOsErrorMessage(os_error_message); |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
Log::PrintErr("Error pipe creation failed: %s\n", *os_error_message); |
return errno; |
} |
FDUtils::SetCloseOnExec(read_err[0]); |
- result = TEMP_FAILURE_RETRY(pipe(write_out)); |
+ result = pipe(write_out); |
if (result < 0) { |
SetChildOsErrorMessage(os_error_message); |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
- TEMP_FAILURE_RETRY(close(read_err[0])); |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
Log::PrintErr("Error pipe creation failed: %s\n", *os_error_message); |
return errno; |
} |
FDUtils::SetCloseOnExec(write_out[1]); |
- result = TEMP_FAILURE_RETRY(pipe(exec_control)); |
+ result = pipe(exec_control); |
if (result < 0) { |
SetChildOsErrorMessage(os_error_message); |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
- TEMP_FAILURE_RETRY(close(read_err[0])); |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
- TEMP_FAILURE_RETRY(close(write_out[0])); |
- TEMP_FAILURE_RETRY(close(write_out[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[1])); |
Log::PrintErr("Error pipe creation failed: %s\n", *os_error_message); |
return errno; |
} |
@@ -321,14 +321,14 @@ int Process::Start(const char* path, |
if (result < 0) { |
SetChildOsErrorMessage(os_error_message); |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
- TEMP_FAILURE_RETRY(close(read_err[0])); |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
- TEMP_FAILURE_RETRY(close(write_out[0])); |
- TEMP_FAILURE_RETRY(close(write_out[1])); |
- TEMP_FAILURE_RETRY(close(exec_control[0])); |
- TEMP_FAILURE_RETRY(close(exec_control[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control[1])); |
Log::PrintErr("fcntl failed: %s\n", *os_error_message); |
return errno; |
} |
@@ -349,18 +349,18 @@ int Process::Start(const char* path, |
program_environment[environment_length] = NULL; |
} |
- pid = TEMP_FAILURE_RETRY_BLOCK_SIGNALS(fork()); |
+ pid = TEMP_FAILURE_RETRY(fork()); |
if (pid < 0) { |
SetChildOsErrorMessage(os_error_message); |
delete[] program_arguments; |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
- TEMP_FAILURE_RETRY(close(read_err[0])); |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
- TEMP_FAILURE_RETRY(close(write_out[0])); |
- TEMP_FAILURE_RETRY(close(write_out[1])); |
- TEMP_FAILURE_RETRY(close(exec_control[0])); |
- TEMP_FAILURE_RETRY(close(exec_control[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control[1])); |
return errno; |
} else if (pid == 0) { |
// Wait for parent process before setting up the child process. |
@@ -371,28 +371,27 @@ int Process::Start(const char* path, |
exit(1); |
} |
- TEMP_FAILURE_RETRY(close(write_out[1])); |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_err[0])); |
- TEMP_FAILURE_RETRY(close(exec_control[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control[0])); |
if (TEMP_FAILURE_RETRY(dup2(write_out[0], STDIN_FILENO)) == -1) { |
ReportChildError(exec_control[1]); |
} |
- TEMP_FAILURE_RETRY(close(write_out[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[0])); |
if (TEMP_FAILURE_RETRY(dup2(read_in[1], STDOUT_FILENO)) == -1) { |
ReportChildError(exec_control[1]); |
} |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
if (TEMP_FAILURE_RETRY(dup2(read_err[1], STDERR_FILENO)) == -1) { |
ReportChildError(exec_control[1]); |
} |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
- if (working_directory != NULL && |
- TEMP_FAILURE_RETRY(chdir(working_directory)) == -1) { |
+ if (working_directory != NULL && chdir(working_directory) == -1) { |
ReportChildError(exec_control[1]); |
} |
@@ -400,8 +399,7 @@ int Process::Start(const char* path, |
environ = program_environment; |
} |
- TEMP_FAILURE_RETRY( |
- execvp(path, const_cast<char* const*>(program_arguments))); |
+ execvp(path, const_cast<char* const*>(program_arguments)); |
ReportChildError(exec_control[1]); |
} |
@@ -415,15 +413,15 @@ int Process::Start(const char* path, |
delete[] program_environment; |
int event_fds[2]; |
- result = TEMP_FAILURE_RETRY(pipe(event_fds)); |
+ result = pipe(event_fds); |
if (result < 0) { |
SetChildOsErrorMessage(os_error_message); |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
- TEMP_FAILURE_RETRY(close(read_err[0])); |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
- TEMP_FAILURE_RETRY(close(write_out[0])); |
- TEMP_FAILURE_RETRY(close(write_out[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[1])); |
Log::PrintErr("Error pipe creation failed: %s\n", *os_error_message); |
return errno; |
} |
@@ -444,7 +442,7 @@ int Process::Start(const char* path, |
// Read exec result from child. If no data is returned the exec was |
// successful and the exec call closed the pipe. Otherwise the errno |
// is written to the pipe. |
- TEMP_FAILURE_RETRY(close(exec_control[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control[1])); |
int child_errno; |
int bytes_read = -1; |
ASSERT(sizeof(child_errno) == sizeof(errno)); |
@@ -460,22 +458,22 @@ int Process::Start(const char* path, |
message[kMaxMessageSize - 1] = '\0'; |
*os_error_message = message; |
} |
- TEMP_FAILURE_RETRY(close(exec_control[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(exec_control[0])); |
// Return error code if any failures. |
if (bytes_read != 0) { |
- TEMP_FAILURE_RETRY(close(read_in[0])); |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
- TEMP_FAILURE_RETRY(close(read_err[0])); |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
- TEMP_FAILURE_RETRY(close(write_out[0])); |
- TEMP_FAILURE_RETRY(close(write_out[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[1])); |
// Since exec() failed, we're not interested in the exit code. |
// We close the reading side of the exit code pipe here. |
// GetProcessExitCodes will get a broken pipe error when it tries to write |
// to the writing side of the pipe and it will ignore the error. |
- TEMP_FAILURE_RETRY(close(*exit_event)); |
+ VOID_TEMP_FAILURE_RETRY(close(*exit_event)); |
*exit_event = -1; |
if (bytes_read == -1) { |
@@ -487,13 +485,13 @@ int Process::Start(const char* path, |
FDUtils::SetNonBlocking(read_in[0]); |
*in = read_in[0]; |
- TEMP_FAILURE_RETRY(close(read_in[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_in[1])); |
FDUtils::SetNonBlocking(write_out[1]); |
*out = write_out[1]; |
- TEMP_FAILURE_RETRY(close(write_out[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(write_out[0])); |
FDUtils::SetNonBlocking(read_err[0]); |
*err = read_err[0]; |
- TEMP_FAILURE_RETRY(close(read_err[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(read_err[1])); |
*id = pid; |
return 0; |
@@ -618,7 +616,7 @@ bool Process::Wait(intptr_t pid, |
bool Process::Kill(intptr_t id, int signal) { |
- return (TEMP_FAILURE_RETRY(kill(id, signal)) != -1); |
+ return kill(id, signal) != -1; |
} |
@@ -673,12 +671,12 @@ intptr_t Process::SetSignalHandler(intptr_t signal) { |
} |
if (!found) return -1; |
int fds[2]; |
- if (TEMP_FAILURE_RETRY_BLOCK_SIGNALS(pipe(fds)) != 0) { |
+ if (pipe(fds) != 0) { |
return -1; |
} |
if (!FDUtils::SetNonBlocking(fds[0])) { |
- VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(close(fds[0])); |
- VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(close(fds[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(fds[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(fds[1])); |
return -1; |
} |
ThreadSignalBlocker blocker(kSignalsCount, kSignals); |
@@ -700,11 +698,10 @@ intptr_t Process::SetSignalHandler(intptr_t signal) { |
for (int i = 0; i < kSignalsCount; i++) { |
sigaddset(&act.sa_mask, kSignals[i]); |
} |
- int status = TEMP_FAILURE_RETRY_BLOCK_SIGNALS( |
- sigaction(signal, &act, NULL)); |
+ int status = sigaction(signal, &act, NULL); |
if (status < 0) { |
- VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(close(fds[0])); |
- VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(close(fds[1])); |
+ VOID_TEMP_FAILURE_RETRY(close(fds[0])); |
+ VOID_TEMP_FAILURE_RETRY(close(fds[1])); |
return -1; |
} |
} |
@@ -741,7 +738,7 @@ void Process::ClearSignalHandler(intptr_t signal) { |
struct sigaction act; |
bzero(&act, sizeof(act)); |
act.sa_handler = SIG_DFL; |
- VOID_TEMP_FAILURE_RETRY_BLOCK_SIGNALS(sigaction(signal, &act, NULL)); |
+ sigaction(signal, &act, NULL); |
} |
} |