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