diff options
author | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-15 00:07:00 +0000 |
---|---|---|
committer | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-15 00:07:00 +0000 |
commit | dc875dc95290a9a5e4245e24e209a0496038f46c (patch) | |
tree | 30af6bb90080078ebe4adb96fe1c2a50df199f94 /ipc/ipc_channel_posix.h | |
parent | 3a678cfe431c44d9397e4616c676578f58ed69ca (diff) | |
download | chromium_src-dc875dc95290a9a5e4245e24e209a0496038f46c.zip chromium_src-dc875dc95290a9a5e4245e24e209a0496038f46c.tar.gz chromium_src-dc875dc95290a9a5e4245e24e209a0496038f46c.tar.bz2 |
Alternative workaround for mac kernel bug.
BUG=298276
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=227999
Review URL: https://codereview.chromium.org/25325002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228569 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_; |