| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "mojo/edk/system/node_controller.h" | 5 #include "mojo/edk/system/node_controller.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 base::AutoLock lock(peers_lock_); | 703 base::AutoLock lock(peers_lock_); |
| 704 auto& queue = pending_peer_messages_[name]; | 704 auto& queue = pending_peer_messages_[name]; |
| 705 needs_introduction = queue.empty(); | 705 needs_introduction = queue.empty(); |
| 706 queue.emplace(std::move(channel_message)); | 706 queue.emplace(std::move(channel_message)); |
| 707 } | 707 } |
| 708 | 708 |
| 709 if (needs_introduction) { | 709 if (needs_introduction) { |
| 710 scoped_refptr<NodeChannel> broker = GetBrokerChannel(); | 710 scoped_refptr<NodeChannel> broker = GetBrokerChannel(); |
| 711 if (!broker) { | 711 if (!broker) { |
| 712 DVLOG(1) << "Dropping message for unknown peer: " << name; | 712 DVLOG(1) << "Dropping message for unknown peer: " << name; |
| 713 |
| 714 base::AutoLock lock(peers_lock_); |
| 715 pending_peer_messages_.erase(name); |
| 713 return; | 716 return; |
| 714 } | 717 } |
| 715 broker->RequestIntroduction(name); | 718 broker->RequestIntroduction(name); |
| 716 } | 719 } |
| 717 } | 720 } |
| 718 | 721 |
| 719 void NodeController::AcceptIncomingMessages() { | 722 void NodeController::AcceptIncomingMessages() { |
| 720 // This is an impactically large value which should never be reached in | 723 // This is an impactically large value which should never be reached in |
| 721 // practice. See the CHECK below for usage. | 724 // practice. See the CHECK below for usage. |
| 722 constexpr size_t kMaxAcceptedMessages = 1000000; | 725 constexpr size_t kMaxAcceptedMessages = 1000000; |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 928 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 931 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 929 | 932 |
| 930 auto it = pending_children_.find(from_node); | 933 auto it = pending_children_.find(from_node); |
| 931 if (it == pending_children_.end() || token != from_node) { | 934 if (it == pending_children_.end() || token != from_node) { |
| 932 DLOG(ERROR) << "Received unexpected AcceptParent message from " | 935 DLOG(ERROR) << "Received unexpected AcceptParent message from " |
| 933 << from_node; | 936 << from_node; |
| 934 DropPeer(from_node, nullptr); | 937 DropPeer(from_node, nullptr); |
| 935 return; | 938 return; |
| 936 } | 939 } |
| 937 | 940 |
| 941 { |
| 942 base::AutoLock lock(reserved_ports_lock_); |
| 943 auto it = pending_child_tokens_.find(from_node); |
| 944 if (it != pending_child_tokens_.end()) { |
| 945 std::string token = std::move(it->second); |
| 946 pending_child_tokens_.erase(it); |
| 947 pending_child_tokens_[child_name] = std::move(token); |
| 948 } |
| 949 } |
| 950 |
| 938 scoped_refptr<NodeChannel> channel = it->second; | 951 scoped_refptr<NodeChannel> channel = it->second; |
| 939 pending_children_.erase(it); | 952 pending_children_.erase(it); |
| 940 | 953 |
| 941 DCHECK(channel); | 954 DCHECK(channel); |
| 942 | 955 |
| 943 DVLOG(1) << "Parent " << name_ << " accepted child " << child_name; | 956 DVLOG(1) << "Parent " << name_ << " accepted child " << child_name; |
| 944 | 957 |
| 945 AddPeer(child_name, channel, false /* start_channel */); | 958 AddPeer(child_name, channel, false /* start_channel */); |
| 946 | 959 |
| 947 // TODO(rockot/amistry): We could simplify child initialization if we could | 960 // TODO(rockot/amistry): We could simplify child initialization if we could |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1148 ports::PortRef local_port; | 1161 ports::PortRef local_port; |
| 1149 { | 1162 { |
| 1150 base::AutoLock lock(reserved_ports_lock_); | 1163 base::AutoLock lock(reserved_ports_lock_); |
| 1151 auto it = reserved_ports_.find(token); | 1164 auto it = reserved_ports_.find(token); |
| 1152 if (it == reserved_ports_.end()) { | 1165 if (it == reserved_ports_.end()) { |
| 1153 DVLOG(1) << "Ignoring request to connect to port for unknown token " | 1166 DVLOG(1) << "Ignoring request to connect to port for unknown token " |
| 1154 << token; | 1167 << token; |
| 1155 return; | 1168 return; |
| 1156 } | 1169 } |
| 1157 local_port = it->second.port; | 1170 local_port = it->second.port; |
| 1171 reserved_ports_.erase(it); |
| 1158 } | 1172 } |
| 1159 | 1173 |
| 1160 int rv = node_->MergePorts(local_port, from_node, connector_port_name); | 1174 int rv = node_->MergePorts(local_port, from_node, connector_port_name); |
| 1161 if (rv != ports::OK) | 1175 if (rv != ports::OK) |
| 1162 DLOG(ERROR) << "MergePorts failed: " << rv; | 1176 DLOG(ERROR) << "MergePorts failed: " << rv; |
| 1163 | 1177 |
| 1164 AcceptIncomingMessages(); | 1178 AcceptIncomingMessages(); |
| 1165 } | 1179 } |
| 1166 | 1180 |
| 1167 void NodeController::OnRequestIntroduction(const ports::NodeName& from_node, | 1181 void NodeController::OnRequestIntroduction(const ports::NodeName& from_node, |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1450 NodeController::PeerConnection::~PeerConnection() = default; | 1464 NodeController::PeerConnection::~PeerConnection() = default; |
| 1451 | 1465 |
| 1452 NodeController::PeerConnection& NodeController::PeerConnection:: | 1466 NodeController::PeerConnection& NodeController::PeerConnection:: |
| 1453 operator=(const PeerConnection& other) = default; | 1467 operator=(const PeerConnection& other) = default; |
| 1454 | 1468 |
| 1455 NodeController::PeerConnection& NodeController::PeerConnection:: | 1469 NodeController::PeerConnection& NodeController::PeerConnection:: |
| 1456 operator=(PeerConnection&& other) = default; | 1470 operator=(PeerConnection&& other) = default; |
| 1457 | 1471 |
| 1458 } // namespace edk | 1472 } // namespace edk |
| 1459 } // namespace mojo | 1473 } // namespace mojo |
| OLD | NEW |