Index: runtime/bin/fdutils_linux.cc |
=================================================================== |
--- runtime/bin/fdutils_linux.cc (revision 7329) |
+++ runtime/bin/fdutils_linux.cc (working copy) |
@@ -10,14 +10,14 @@ |
#include "bin/fdutils.h" |
-bool FDUtils::SetNonBlocking(intptr_t fd) { |
+static bool SetBlockingHelper(intptr_t fd, bool blocking) { |
intptr_t status; |
status = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFL)); |
if (status < 0) { |
perror("fcntl F_GETFL failed"); |
return false; |
} |
- status = (status | O_NONBLOCK); |
+ status = blocking ? (status & ~O_NONBLOCK) : (status | O_NONBLOCK); |
if (TEMP_FAILURE_RETRY(fcntl(fd, F_SETFL, status)) < 0) { |
perror("fcntl F_SETFL failed"); |
return false; |
@@ -26,6 +26,16 @@ |
} |
+bool FDUtils::SetNonBlocking(intptr_t fd) { |
+ return SetBlockingHelper(fd, false); |
+} |
+ |
+ |
+bool FDUtils::SetBlocking(intptr_t fd) { |
+ return SetBlockingHelper(fd, true); |
+} |
+ |
+ |
bool FDUtils::IsBlocking(intptr_t fd, bool* is_blocking) { |
intptr_t status; |
status = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFL)); |