Index: ipc/ipc_channel_posix.cc |
diff --git a/ipc/ipc_channel_posix.cc b/ipc/ipc_channel_posix.cc |
index bbf137432943d7abfe487f8dacf96828a31823ee..4a71f424eac123aa898ce329069813da0bf1f3b9 100644 |
--- a/ipc/ipc_channel_posix.cc |
+++ b/ipc/ipc_channel_posix.cc |
@@ -285,7 +285,7 @@ Channel::ChannelImpl::ChannelImpl(const std::string& channel_id, Mode mode, |
server_listen_pipe_(-1), |
pipe_(-1), |
client_pipe_(-1), |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
fd_pipe_(-1), |
remote_fd_pipe_(-1), |
#endif |
@@ -407,16 +407,10 @@ bool Channel::ChannelImpl::CreatePipe(const std::string& channel_id, |
scoped_ptr<Message> msg(new Message(MSG_ROUTING_NONE, |
HELLO_MESSAGE_TYPE, |
IPC::Message::PRIORITY_NORMAL)); |
- #if !defined(OS_MACOSX) |
+ #if defined(IPC_USES_READWRITE) |
if (!uses_fifo_) { |
- // On Linux, the seccomp sandbox makes it very expensive to call |
- // recvmsg() and sendmsg(). Often, we are perfectly OK with resorting to |
- // read() and write(), which are cheap. |
- // |
- // As we cannot anticipate, when the sender will provide us with file |
- // handles, we have to make the decision about whether we call read() or |
- // recvmsg() before we actually make the call. The easiest option is to |
- // create a dedicated socketpair() for exchanging file handles. |
+ // Create a dedicated socketpair() for exchanging file descriptors. |
+ // See comments for IPC_USES_READWRITE for details. |
if (mode == MODE_SERVER) { |
fd_pipe_ = -1; |
} else if (remote_fd_pipe_ == -1) { |
@@ -483,7 +477,7 @@ bool Channel::ChannelImpl::ProcessIncomingMessages() { |
// Read from pipe. |
// recvmsg() returns 0 if the connection has closed or EAGAIN if no data |
// is waiting on the pipe. |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
if (fd_pipe_ >= 0) { |
bytes_read = HANDLE_EINTR(read(pipe_, input_buf_, |
Channel::kReadBufferSize)); |
@@ -616,7 +610,7 @@ bool Channel::ChannelImpl::ProcessIncomingMessages() { |
if (m.header()->num_fds > num_fds - fds_i) { |
// the message has been completely received, but we didn't get |
// enough file descriptors. |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
if (!uses_fifo_) { |
char dummy; |
struct iovec fd_pipe_iov = { &dummy, 1 }; |
@@ -706,7 +700,7 @@ bool Channel::ChannelImpl::ProcessIncomingMessages() { |
if (!m.ReadInt(&iter, &pid)) { |
NOTREACHED(); |
} |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
if (mode_ == MODE_SERVER && !uses_fifo_) { |
// On non-Mac, the Hello message from the client to the server |
// also contains the fd_pipe_, which will be used for all |
@@ -769,7 +763,7 @@ bool Channel::ChannelImpl::ProcessOutgoingMessages() { |
while (!output_queue_.empty()) { |
Message* msg = output_queue_.front(); |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
scoped_ptr<Message> hello; |
if (remote_fd_pipe_ != -1 && |
msg->routing_id() == MSG_ROUTING_NONE && |
@@ -839,7 +833,7 @@ bool Channel::ChannelImpl::ProcessOutgoingMessages() { |
// num_fds < MAX_DESCRIPTORS_PER_MESSAGE so no danger of overflow. |
msg->header()->num_fds = static_cast<uint16>(num_fds); |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
if (!uses_fifo_ && |
(msg->routing_id() != MSG_ROUTING_NONE || |
msg->type() != HELLO_MESSAGE_TYPE)) { |
@@ -861,7 +855,7 @@ bool Channel::ChannelImpl::ProcessOutgoingMessages() { |
if (bytes_written == 1) { |
fd_written = pipe_; |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
if (mode_ != MODE_SERVER && !uses_fifo_ && |
msg->routing_id() == MSG_ROUTING_NONE && |
msg->type() == HELLO_MESSAGE_TYPE) { |
@@ -1030,7 +1024,7 @@ void Channel::ChannelImpl::Close() { |
PipeMap::GetInstance()->RemoveAndClose(pipe_name_); |
client_pipe_ = -1; |
} |
-#if !defined(OS_MACOSX) |
+#if defined(IPC_USES_READWRITE) |
if (fd_pipe_ != -1) { |
if (HANDLE_EINTR(close(fd_pipe_)) < 0) |
PLOG(ERROR) << "close"; |