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

Unified Diff: mojo/edk/system/node_controller.h

Issue 1675603002: [mojo-edk] Simplify multiprocess pipe bootstrap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix some callers to work with sync APIs Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/edk/system/node_channel.cc ('k') | mojo/edk/system/node_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/node_controller.h
diff --git a/mojo/edk/system/node_controller.h b/mojo/edk/system/node_controller.h
index 35148a01cdcbad48e91b39385e554ae7c4d4cff7..0675e9743f7177bed66740f24dd0404217289cf0 100644
--- a/mojo/edk/system/node_controller.h
+++ b/mojo/edk/system/node_controller.h
@@ -82,42 +82,13 @@ class NodeController : public ports::NodeDelegate,
int SendMessage(const ports::PortRef& port_ref,
scoped_ptr<PortsMessage>* message);
- using ReservePortCallback = base::Callback<void(const ports::PortRef& port)>;
+ // Reserves a local port |port| associated with |token|. A peer holding a copy
+ // of |token| can merge one of its own ports into this one.
+ void ReservePort(const std::string& token, const ports::PortRef& port);
- // Reserves a port associated with |token|. A peer may associate one of their
- // own ports with this one by sending us a RequestPortConnection message with
- // the same token value.
- //
- // Note that the reservation is made synchronously. In order to avoid races,
- // reservations should be acquired before |token| is communicated to any
- // potential peer.
- //
- // |callback| must be runnable on any thread and will be run with a reference
- // to the new local port once connected.
- void ReservePort(const std::string& token,
- const ReservePortCallback& callback);
-
- // Eventually initializes a local port with a parent port peer identified by
- // |token|. The parent should also have |token| and should alrady have
- // reserved a port for it. |callback| must be runnable on any thread and will
- // be run if and when the local port is connected.
- void ConnectToParentPort(const ports::PortRef& local_port,
- const std::string& token,
- const base::Closure& callback);
-
- // Connects two reserved ports to each other. Useful when two independent
- // systems in the same (parent) process need to establish a port pair without
- // any direct knowledge of each other.
- void ConnectReservedPorts(const std::string& token1,
- const std::string& token2);
-
- // Connects a local port to a port on a remote node. Note that a connection to
- // the remote node need not be established yet. The port will be connected
- // ASAP, at which point |callback| will be run.
- void ConnectToRemotePort(const ports::PortRef& local_port,
- const ports::NodeName& remote_node_name,
- const ports::PortName& remote_port_name,
- const base::Closure& callback);
+ // Merges a local port |port| into a port reserved by |token| in the parent.
+ void MergePortIntoParent(const std::string& token,
+ const ports::PortRef& port);
// Creates a new shared buffer for use in the current process.
scoped_refptr<PlatformSharedBuffer> CreateSharedBuffer(size_t num_bytes);
@@ -138,44 +109,9 @@ class NodeController : public ports::NodeDelegate,
scoped_refptr<NodeChannel>>;
using OutgoingMessageQueue = std::queue<Channel::MessagePtr>;
- // Tracks a pending token-based connection to a parent port.
- struct PendingPortRequest {
- PendingPortRequest();
- ~PendingPortRequest();
-
- std::string token;
- ports::PortRef local_port;
- base::Closure callback;
- };
-
- // Tracks a reserved port.
- struct ReservedPort {
- ReservedPort();
- ~ReservedPort();
-
- ports::PortRef local_port;
- ReservePortCallback callback;
- };
-
- // Tracks a pending connection to a remote port on any peer.
- struct PendingRemotePortConnection {
- PendingRemotePortConnection();
- ~PendingRemotePortConnection();
-
- ports::PortRef local_port;
- ports::NodeName remote_node_name;
- ports::PortName remote_port_name;
- base::Closure callback;
- };
-
void ConnectToChildOnIOThread(base::ProcessHandle process_handle,
ScopedPlatformHandle platform_handle);
void ConnectToParentOnIOThread(ScopedPlatformHandle platform_handle);
- void RequestParentPortConnectionOnIOThread(const ports::PortRef& local_port,
- const std::string& token,
- const base::Closure& callback);
- void ConnectToRemotePortOnIOThread(
- const PendingRemotePortConnection& connection);
scoped_refptr<NodeChannel> GetPeerChannel(const ports::NodeName& name);
scoped_refptr<NodeChannel> GetParentChannel();
@@ -215,12 +151,9 @@ class NodeController : public ports::NodeDelegate,
const ports::NodeName& broker_name,
ScopedPlatformHandle broker_channel) override;
void OnPortsMessage(Channel::MessagePtr message) override;
- void OnRequestPortConnection(const ports::NodeName& from_node,
- const ports::PortName& connector_port_name,
- const std::string& token) override;
- void OnConnectToPort(const ports::NodeName& from_node,
- const ports::PortName& connector_port_name,
- const ports::PortName& connectee_port_name) override;
+ void OnRequestPortMerge(const ports::NodeName& from_node,
+ const ports::PortName& connector_port_name,
+ const std::string& token) override;
void OnRequestIntroduction(const ports::NodeName& from_node,
const ports::NodeName& name) override;
void OnIntroduce(const ports::NodeName& from_node,
@@ -264,7 +197,13 @@ class NodeController : public ports::NodeDelegate,
base::Lock reserved_ports_lock_;
// Ports reserved by token.
- base::hash_map<std::string, ReservedPort> reserved_ports_;
+ base::hash_map<std::string, ports::PortRef> reserved_ports_;
+
+ // Guards |pending_port_merges_|.
+ base::Lock pending_port_merges_lock_;
+
+ // A set of port merge requests awaiting parent connection.
+ std::vector<std::pair<std::string, ports::PortRef>> pending_port_merges_;
// Guards |parent_name_| and |bootstrap_parent_channel_|.
base::Lock parent_lock_;
@@ -307,17 +246,6 @@ class NodeController : public ports::NodeDelegate,
// Channels to children during handshake.
NodeMap pending_children_;
- // Port connection requests which have been deferred until we have a parent.
- std::vector<PendingPortRequest> pending_port_requests_;
-
- // Port connection requests awaiting a response from the parent.
- std::unordered_map<ports::PortName, base::Closure>
- pending_parent_port_connections_;
-
- // Port connections pending the availability of a remote peer node.
- std::unordered_map<ports::NodeName, std::vector<PendingRemotePortConnection>>
- pending_remote_port_connections_;
-
// Indicates whether this object should delete itself on IO thread shutdown.
// Must only be accessed from the IO thread.
bool destroy_on_io_thread_shutdown_ = false;
« no previous file with comments | « mojo/edk/system/node_channel.cc ('k') | mojo/edk/system/node_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698