| 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)); | 
|  |