Chromium Code Reviews| Index: base/sync_socket_posix.cc |
| diff --git a/base/sync_socket_posix.cc b/base/sync_socket_posix.cc |
| index 467599c2a901e279b39f5bfd2fda427b775104f7..c408de52238e90bbd7a76a927d5c65bedd32beb7 100644 |
| --- a/base/sync_socket_posix.cc |
| +++ b/base/sync_socket_posix.cc |
| @@ -40,6 +40,15 @@ size_t SendHelper(SyncSocket::Handle handle, |
| return len < 0 ? 0 : static_cast<size_t>(len); |
| } |
| +bool CloseHandle(SyncSocket::Handle handle) { |
| + if (handle != SyncSocket::kInvalidHandle && close(handle) < 0) { |
|
DaleCurtis
2013/11/01 00:15:59
Removed the EINTR here per http://crbug.com/269623
|
| + DPLOG(ERROR) << "close"; |
| + return false; |
| + } |
| + |
| + return true; |
| +} |
| + |
| } // namespace |
| const SyncSocket::Handle SyncSocket::kInvalidHandle = -1; |
| @@ -61,8 +70,11 @@ bool SyncSocket::CreatePair(SyncSocket* socket_a, SyncSocket* socket_b) { |
| #endif // defined(OS_MACOSX) |
| Handle handles[2] = { kInvalidHandle, kInvalidHandle }; |
| - if (socketpair(AF_UNIX, SOCK_STREAM, 0, handles) != 0) |
| - goto cleanup; |
| + if (socketpair(AF_UNIX, SOCK_STREAM, 0, handles) != 0) { |
| + CloseHandle(handles[0]); |
| + CloseHandle(handles[1]); |
| + return false; |
| + } |
| #if defined(OS_MACOSX) |
| // On OSX an attempt to read or write to a closed socket may generate a |
| @@ -71,7 +83,9 @@ bool SyncSocket::CreatePair(SyncSocket* socket_a, SyncSocket* socket_b) { |
| &nosigpipe, sizeof nosigpipe) || |
| 0 != setsockopt(handles[1], SOL_SOCKET, SO_NOSIGPIPE, |
| &nosigpipe, sizeof nosigpipe)) { |
| - goto cleanup; |
| + CloseHandle(handles[0]); |
| + CloseHandle(handles[1]); |
| + return false; |
| } |
| #endif |
| @@ -80,27 +94,12 @@ bool SyncSocket::CreatePair(SyncSocket* socket_a, SyncSocket* socket_b) { |
| socket_b->handle_ = handles[1]; |
| return true; |
| - |
| - cleanup: |
| - if (handles[0] != kInvalidHandle) { |
| - if (HANDLE_EINTR(close(handles[0])) < 0) |
| - DPLOG(ERROR) << "close"; |
| - } |
| - if (handles[1] != kInvalidHandle) { |
| - if (HANDLE_EINTR(close(handles[1])) < 0) |
| - DPLOG(ERROR) << "close"; |
| - } |
| - |
| - return false; |
| } |
| bool SyncSocket::Close() { |
| - if (handle_ == kInvalidHandle) |
| - return true; |
| - const int retval = HANDLE_EINTR(close(handle_)); |
| - DPLOG_IF(ERROR, retval < 0) << "close"; |
| + const bool retval = CloseHandle(handle_); |
| handle_ = kInvalidHandle; |
| - return retval == 0; |
| + return retval; |
| } |
| size_t SyncSocket::Send(const void* buffer, size_t length) { |
| @@ -126,7 +125,7 @@ size_t SyncSocket::ReceiveWithTimeout(void* buffer, |
| DCHECK_GT(length, 0u); |
| DCHECK_LE(length, kMaxMessageLength); |
| DCHECK_NE(handle_, kInvalidHandle); |
| - DCHECK_LT(handle_, FD_SETSIZE); |
| + CHECK_LT(handle_, FD_SETSIZE); |
| // Only timeouts greater than zero and less than one second are allowed. |
| DCHECK_GT(timeout.InMicroseconds(), 0); |