Index: mojo/edk/system/channel.cc |
diff --git a/mojo/edk/system/channel.cc b/mojo/edk/system/channel.cc |
index b63aaeb7901220e3d030f5d769b6e143b218f3f9..0205312899ff82d1bdbe21072835aee0f69c201a 100644 |
--- a/mojo/edk/system/channel.cc |
+++ b/mojo/edk/system/channel.cc |
@@ -20,7 +20,8 @@ namespace system { |
Channel::Channel(embedder::PlatformSupport* platform_support) |
: platform_support_(platform_support), |
is_running_(false), |
- is_shutting_down_(false) { |
+ is_shutting_down_(false), |
+ channel_manager_(nullptr) { |
} |
bool Channel::Init(scoped_ptr<RawChannel> raw_channel) { |
@@ -41,6 +42,15 @@ bool Channel::Init(scoped_ptr<RawChannel> raw_channel) { |
return true; |
} |
+void Channel::SetChannelManager(ChannelManager* channel_manager) { |
+ DCHECK(channel_manager); |
+ |
+ base::AutoLock locker(lock_); |
+ DCHECK(!is_shutting_down_); |
+ DCHECK(!channel_manager_); |
+ channel_manager_ = channel_manager; |
+} |
+ |
void Channel::Shutdown() { |
DCHECK(creation_thread_checker_.CalledOnValidThread()); |
@@ -62,8 +72,7 @@ void Channel::Shutdown() { |
size_t num_live = 0; |
size_t num_zombies = 0; |
for (IdToEndpointMap::iterator it = to_destroy.begin(); |
- it != to_destroy.end(); |
- ++it) { |
+ it != to_destroy.end(); ++it) { |
if (it->second.get()) { |
num_live++; |
it->second->OnDisconnect(); |
@@ -80,6 +89,7 @@ void Channel::Shutdown() { |
void Channel::WillShutdownSoon() { |
base::AutoLock locker(lock_); |
is_shutting_down_ = true; |
+ channel_manager_ = nullptr; |
} |
// Note: |endpoint| being a |scoped_refptr| makes this function safe, since it |
@@ -120,8 +130,7 @@ ChannelEndpointId Channel::AttachAndRunEndpoint( |
if (!is_bootstrap) { |
if (!SendControlMessage( |
- MessageInTransit::kSubtypeChannelAttachAndRunEndpoint, |
- local_id, |
+ MessageInTransit::kSubtypeChannelAttachAndRunEndpoint, local_id, |
remote_id)) { |
HandleLocalError(base::StringPrintf( |
"Failed to send message to run remote message pipe endpoint (local " |
@@ -185,8 +194,7 @@ void Channel::DetachEndpoint(ChannelEndpoint* endpoint, |
} |
if (!SendControlMessage( |
- MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint, |
- local_id, |
+ MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint, local_id, |
remote_id)) { |
HandleLocalError(base::StringPrintf( |
"Failed to send message to remove remote message pipe endpoint (local " |
@@ -459,8 +467,7 @@ bool Channel::OnRemoveMessagePipeEndpoint(ChannelEndpointId local_id, |
if (!SendControlMessage( |
MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck, |
- local_id, |
- remote_id)) { |
+ local_id, remote_id)) { |
HandleLocalError(base::StringPrintf( |
"Failed to send message to remove remote message pipe endpoint ack " |
"(local ID %u, remote ID %u)", |