Index: ipc/ipc_channel_posix.h |
diff --git a/ipc/ipc_channel_posix.h b/ipc/ipc_channel_posix.h |
index 645a1303713116f188b037c5f537bee272444607..1e587c13eb0d02e8737db4d6c088659356656e3e 100644 |
--- a/ipc/ipc_channel_posix.h |
+++ b/ipc/ipc_channel_posix.h |
@@ -10,6 +10,7 @@ |
#include <sys/socket.h> // for CMSG macros |
#include <queue> |
+#include <set> |
#include <string> |
#include <vector> |
@@ -80,6 +81,8 @@ class Channel::ChannelImpl : public internal::ChannelReader, |
void ClosePipeOnError(); |
int GetHelloMessageProcId(); |
void QueueHelloMessage(); |
+ void CloseFileDescriptors(Message* msg); |
+ void QueueCloseFDMessage(int fd, int hops); |
// ChannelReader implementation. |
virtual ReadState ReadData(char* buffer, |
@@ -87,7 +90,7 @@ class Channel::ChannelImpl : public internal::ChannelReader, |
int* bytes_read) OVERRIDE; |
virtual bool WillDispatchInputMessage(Message* msg) OVERRIDE; |
virtual bool DidEmptyInputBuffers() OVERRIDE; |
- virtual void HandleHelloMessage(const Message& msg) OVERRIDE; |
+ virtual void HandleInternalMessage(const Message& msg) OVERRIDE; |
#if defined(IPC_USES_READWRITE) |
// Reads the next message from the fd_pipe_ and appends them to the |
@@ -184,6 +187,13 @@ class Channel::ChannelImpl : public internal::ChannelReader, |
// implementation! |
std::vector<int> input_fds_; |
+#if defined(OS_MACOSX) |
+ // On OSX, sent FDs must not be closed until we get an ack. |
+ // Keep track of sent FDs here to make sure the remote is not |
+ // trying to bamboozle us. |
+ std::set<int> fds_to_close_; |
+#endif |
+ |
// True if we are responsible for unlinking the unix domain socket file. |
bool must_unlink_; |