Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Side by Side Diff: ipc/ipc_channel_posix.cc

Issue 1206093002: Update ChannelReader to use AttachmentBroker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@attachment_broker3_listener
Patch Set: Add an optimization to immediately dispatch messages after translation. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ipc/ipc_channel_posix.h" 5 #include "ipc/ipc_channel_posix.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <sys/socket.h> 10 #include <sys/socket.h>
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 645
646 if (!AcceptConnection()) { 646 if (!AcceptConnection()) {
647 NOTREACHED() << "AcceptConnection should not fail on server"; 647 NOTREACHED() << "AcceptConnection should not fail on server";
648 } 648 }
649 waiting_connect_ = false; 649 waiting_connect_ = false;
650 #endif 650 #endif
651 } else if (fd == pipe_) { 651 } else if (fd == pipe_) {
652 if (waiting_connect_ && (mode_ & MODE_SERVER_FLAG)) { 652 if (waiting_connect_ && (mode_ & MODE_SERVER_FLAG)) {
653 waiting_connect_ = false; 653 waiting_connect_ = false;
654 } 654 }
655 if (!ProcessIncomingMessages()) { 655 if (ProcessIncomingMessages() == DISPATCH_ERROR) {
656 // ClosePipeOnError may delete this object, so we mustn't call 656 // ClosePipeOnError may delete this object, so we mustn't call
657 // ProcessOutgoingMessages. 657 // ProcessOutgoingMessages.
658 ClosePipeOnError(); 658 ClosePipeOnError();
659 return; 659 return;
660 } 660 }
661 } else { 661 } else {
662 NOTREACHED() << "Unknown pipe " << fd; 662 NOTREACHED() << "Unknown pipe " << fd;
663 } 663 }
664 664
665 // If we're a server and handshaking, then we want to make sure that we 665 // If we're a server and handshaking, then we want to make sure that we
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 DCHECK(*bytes_read); 792 DCHECK(*bytes_read);
793 793
794 CloseClientFileDescriptor(); 794 CloseClientFileDescriptor();
795 795
796 // Read any file descriptors from the message. 796 // Read any file descriptors from the message.
797 if (!ExtractFileDescriptorsFromMsghdr(&msg)) 797 if (!ExtractFileDescriptorsFromMsghdr(&msg))
798 return READ_FAILED; 798 return READ_FAILED;
799 return READ_SUCCEEDED; 799 return READ_SUCCEEDED;
800 } 800 }
801 801
802 bool ChannelPosix::ShouldDispatchInputMessage(Message* msg) {
803 return true;
804 }
805
802 // On Posix, we need to fix up the file descriptors before the input message 806 // On Posix, we need to fix up the file descriptors before the input message
803 // is dispatched. 807 // is dispatched.
804 // 808 //
805 // This will read from the input_fds_ (READWRITE mode only) and read more 809 // This will read from the input_fds_ (READWRITE mode only) and read more
806 // handles from the FD pipe if necessary. 810 // handles from the FD pipe if necessary.
807 bool ChannelPosix::WillDispatchInputMessage(Message* msg) { 811 bool ChannelPosix::GetNonBrokeredAttachments(Message* msg) {
808 uint16 header_fds = msg->header()->num_fds; 812 uint16 header_fds = msg->header()->num_fds;
809 if (!header_fds) 813 if (!header_fds)
810 return true; // Nothing to do. 814 return true; // Nothing to do.
811 815
812 // The message has file descriptors. 816 // The message has file descriptors.
813 const char* error = NULL; 817 const char* error = NULL;
814 if (header_fds > input_fds_.size()) { 818 if (header_fds > input_fds_.size()) {
815 // The message has been completely received, but we didn't get 819 // The message has been completely received, but we didn't get
816 // enough file descriptors. 820 // enough file descriptors.
817 error = "Message needs unreceived descriptors"; 821 error = "Message needs unreceived descriptors";
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 } 1033 }
1030 1034
1031 #if defined(OS_LINUX) 1035 #if defined(OS_LINUX)
1032 // static 1036 // static
1033 void Channel::SetGlobalPid(int pid) { 1037 void Channel::SetGlobalPid(int pid) {
1034 ChannelPosix::SetGlobalPid(pid); 1038 ChannelPosix::SetGlobalPid(pid);
1035 } 1039 }
1036 #endif // OS_LINUX 1040 #endif // OS_LINUX
1037 1041
1038 } // namespace IPC 1042 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc_channel_posix.h ('k') | ipc/ipc_channel_reader.h » ('j') | ipc/ipc_channel_reader.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698