| Index: ipc/ipc_channel_posix.h
|
| diff --git a/ipc/ipc_channel_posix.h b/ipc/ipc_channel_posix.h
|
| index b7818a289b831779b98f19c055e2b2a0d312aee2..43362aabca4b803e128af8a255c90323e08bdce3 100644
|
| --- a/ipc/ipc_channel_posix.h
|
| +++ b/ipc/ipc_channel_posix.h
|
| @@ -17,6 +17,27 @@
|
| #include "base/message_loop.h"
|
| #include "ipc/file_descriptor_set_posix.h"
|
|
|
| +#if !defined(OS_MACOSX)
|
| +// On Linux, the seccomp sandbox makes it very expensive to call
|
| +// recvmsg() and sendmsg(). The restriction on calling read() and write(), which
|
| +// are cheap, is that we can't pass file descriptors over them.
|
| +//
|
| +// As we cannot anticipate when the sender will provide us with file
|
| +// descriptors, 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 descriptors.
|
| +// Mac can also run in IPC_USES_READWRITE mode if necessary, but at this time
|
| +// doesn't take a performance hit from recvmsg and sendmsg, so it doesn't
|
| +// make sense to waste resources on having the separate dedicated socketpair.
|
| +// It is however useful for debugging between Linux and Mac to be able to turn
|
| +// this switch 'on' on the Mac as well.
|
| +
|
| +// The HELLO message from the client to the server is always sent using
|
| +// sendmsg because it will contain the file descriptor that the server
|
| +// needs to send file descriptors in later messages.
|
| +#define IPC_USES_READWRITE 1
|
| +#endif
|
| +
|
| namespace IPC {
|
|
|
| // Store that channel name |name| is available via socket |socket|.
|
| @@ -87,7 +108,7 @@ class Channel::ChannelImpl : public MessageLoopForIO::Watcher {
|
| // pipe_ that is passed to the client.
|
| int client_pipe_;
|
|
|
| -#if !defined(OS_MACOSX)
|
| +#if defined(IPC_USES_READWRITE)
|
| // Linux/BSD use a dedicated socketpair() for passing file descriptors.
|
| int fd_pipe_;
|
| int remote_fd_pipe_;
|
|
|