diff options
author | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-10 21:12:14 +0000 |
---|---|---|
committer | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-10 21:12:14 +0000 |
commit | 6b47b4d5738da9dd70db9f638f7858dd12da86da (patch) | |
tree | b73c04bc351ba43dbd8b54eeeacb3729047b8630 /ipc/ipc_channel_posix.h | |
parent | e31473843740b48df1f8f0969101e39b8ecf14da (diff) | |
download | chromium_src-6b47b4d5738da9dd70db9f638f7858dd12da86da.zip chromium_src-6b47b4d5738da9dd70db9f638f7858dd12da86da.tar.gz chromium_src-6b47b4d5738da9dd70db9f638f7858dd12da86da.tar.bz2 |
Alternative workaround for mac kernel bug.
BUG=298276
Review URL: https://codereview.chromium.org/25325002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@227999 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_channel_posix.h')
-rw-r--r-- | ipc/ipc_channel_posix.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/ipc/ipc_channel_posix.h b/ipc/ipc_channel_posix.h index 645a130..1e587c1 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_; |