Index: mojo/edk/system/channel_endpoint.cc |
diff --git a/mojo/edk/system/channel_endpoint.cc b/mojo/edk/system/channel_endpoint.cc |
index ac2005603ee8a26d182637f6037c5c6e27d972de..0318f2f90c6426ec848ca4ccd6d9b10674ce0a5b 100644 |
--- a/mojo/edk/system/channel_endpoint.cc |
+++ b/mojo/edk/system/channel_endpoint.cc |
@@ -62,6 +62,34 @@ |
channel_ = nullptr; |
local_id_ = ChannelEndpointId(); |
remote_id_ = ChannelEndpointId(); |
+ } |
+} |
+ |
+void ChannelEndpoint::AttachToChannel(Channel* channel, |
+ ChannelEndpointId local_id) { |
+ DCHECK(channel); |
+ DCHECK(local_id.is_valid()); |
+ |
+ base::AutoLock locker(lock_); |
+ DCHECK(!channel_); |
+ DCHECK(!local_id_.is_valid()); |
+ channel_ = channel; |
+ local_id_ = local_id; |
+} |
+ |
+void ChannelEndpoint::Run(ChannelEndpointId remote_id) { |
+ DCHECK(remote_id.is_valid()); |
+ |
+ base::AutoLock locker(lock_); |
+ if (!channel_) |
+ return; |
+ |
+ DCHECK(!remote_id_.is_valid()); |
+ remote_id_ = remote_id; |
+ |
+ while (!paused_message_queue_.IsEmpty()) { |
+ LOG_IF(WARNING, !WriteMessageNoLock(paused_message_queue_.GetMessage())) |
+ << "Failed to write enqueue message to channel"; |
} |
} |