summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_channel_posix.h
diff options
context:
space:
mode:
authorhubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 00:07:00 +0000
committerhubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 00:07:00 +0000
commitdc875dc95290a9a5e4245e24e209a0496038f46c (patch)
tree30af6bb90080078ebe4adb96fe1c2a50df199f94 /ipc/ipc_channel_posix.h
parent3a678cfe431c44d9397e4616c676578f58ed69ca (diff)
downloadchromium_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.h12
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_;