| Index: base/posix/unix_domain_socket_linux.cc
|
| diff --git a/base/posix/unix_domain_socket_linux.cc b/base/posix/unix_domain_socket_linux.cc
|
| index 8bfc8cea7fcf32e5910225e04a62350ccfeb4b82..76b8c4462cb4b8cd73acf21d5b2af1e4c90c7b6e 100644
|
| --- a/base/posix/unix_domain_socket_linux.cc
|
| +++ b/base/posix/unix_domain_socket_linux.cc
|
| @@ -149,9 +149,22 @@ ssize_t UnixDomainSocket::SendRecvMsg(int fd,
|
| unsigned max_reply_len,
|
| int* result_fd,
|
| const Pickle& request) {
|
| - return UnixDomainSocket::SendRecvMsgWithFlags(fd, reply, max_reply_len,
|
| - 0, /* recvmsg_flags */
|
| - result_fd, request);
|
| + const int recvmsg_flags = 0;
|
| + const int request_fd = -1;
|
| + return SendRecvMsgImpl(
|
| + fd, reply, max_reply_len, recvmsg_flags, result_fd, request, request_fd);
|
| +}
|
| +
|
| +// static
|
| +ssize_t UnixDomainSocket::SendRecvMsgWithFD(int fd,
|
| + uint8_t* reply,
|
| + unsigned max_reply_len,
|
| + int* result_fd,
|
| + const Pickle& request,
|
| + int request_fd) {
|
| + const int recvmsg_flags = 0;
|
| + return SendRecvMsgImpl(
|
| + fd, reply, max_reply_len, recvmsg_flags, result_fd, request, request_fd);
|
| }
|
|
|
| // static
|
| @@ -161,6 +174,19 @@ ssize_t UnixDomainSocket::SendRecvMsgWithFlags(int fd,
|
| int recvmsg_flags,
|
| int* result_fd,
|
| const Pickle& request) {
|
| + const int request_fd = -1;
|
| + return SendRecvMsgImpl(
|
| + fd, reply, max_reply_len, recvmsg_flags, result_fd, request, request_fd);
|
| +}
|
| +
|
| +// static
|
| +ssize_t UnixDomainSocket::SendRecvMsgImpl(int fd,
|
| + uint8_t* reply,
|
| + unsigned max_reply_len,
|
| + int recvmsg_flags,
|
| + int* result_fd,
|
| + const Pickle& request,
|
| + int request_fd) {
|
| int fds[2];
|
|
|
| // This socketpair is only used for the IPC and is cleaned up before
|
| @@ -170,6 +196,8 @@ ssize_t UnixDomainSocket::SendRecvMsgWithFlags(int fd,
|
|
|
| std::vector<int> fd_vector;
|
| fd_vector.push_back(fds[1]);
|
| + if (request_fd != -1)
|
| + fd_vector.push_back(request_fd);
|
| if (!SendMsg(fd, request.data(), request.size(), fd_vector)) {
|
| close(fds[0]);
|
| close(fds[1]);
|
|
|