| Index: third_party/mojo/src/mojo/edk/system/channel_manager.cc
|
| diff --git a/third_party/mojo/src/mojo/edk/system/channel_manager.cc b/third_party/mojo/src/mojo/edk/system/channel_manager.cc
|
| index a5301b39300810374845c550f38da47e6b88821d..711b4daadc1334cb68859dfb8beb2c7f55ef4c2d 100644
|
| --- a/third_party/mojo/src/mojo/edk/system/channel_manager.cc
|
| +++ b/third_party/mojo/src/mojo/edk/system/channel_manager.cc
|
| @@ -7,7 +7,6 @@
|
| #include "base/bind.h"
|
| #include "base/bind_helpers.h"
|
| #include "base/location.h"
|
| -#include "base/message_loop/message_loop_proxy.h"
|
| #include "base/task_runner.h"
|
| #include "mojo/edk/system/channel.h"
|
| #include "mojo/edk/system/channel_endpoint.h"
|
| @@ -19,12 +18,10 @@ namespace system {
|
| namespace {
|
|
|
| void ShutdownChannelHelper(
|
| - const ChannelInfo& channel_info,
|
| + scoped_refptr<Channel> channel,
|
| const base::Closure& callback,
|
| scoped_refptr<base::TaskRunner> callback_thread_task_runner) {
|
| - DCHECK(base::MessageLoopProxy::current() ==
|
| - channel_info.channel_thread_task_runner);
|
| - channel_info.channel->Shutdown();
|
| + channel->Shutdown();
|
| if (callback_thread_task_runner) {
|
| bool ok = callback_thread_task_runner->PostTask(FROM_HERE, callback);
|
| DCHECK(ok);
|
| @@ -52,24 +49,20 @@ ChannelManager::~ChannelManager() {
|
| // TODO(vtl): This doesn't verify the above condition very strictly at all
|
| // (e.g., we may never have had any channels, or we may have manually shut all
|
| // the channels down).
|
| - DCHECK(channel_infos_.empty());
|
| + DCHECK(channels_.empty());
|
| }
|
|
|
| void ChannelManager::ShutdownOnIOThread() {
|
| // Taking this lock really shouldn't be necessary, but we do it for
|
| // consistency.
|
| - base::hash_map<ChannelId, ChannelInfo> channel_infos;
|
| + ChannelIdToChannelMap channels;
|
| {
|
| base::AutoLock locker(lock_);
|
| - channel_infos.swap(channel_infos_);
|
| + channels.swap(channels_);
|
| }
|
|
|
| - for (const auto& map_elem : channel_infos) {
|
| - const ChannelInfo& channel_info = map_elem.second;
|
| - DCHECK(base::MessageLoopProxy::current() ==
|
| - channel_info.channel_thread_task_runner);
|
| - channel_info.channel->Shutdown();
|
| - }
|
| + for (auto& channel : channels)
|
| + channel.second->Shutdown();
|
| }
|
|
|
| void ChannelManager::Shutdown(
|
| @@ -97,11 +90,8 @@ scoped_refptr<MessagePipeDispatcher> ChannelManager::CreateChannelOnIOThread(
|
| scoped_refptr<MessagePipeDispatcher> ChannelManager::CreateChannel(
|
| ChannelId channel_id,
|
| embedder::ScopedPlatformHandle platform_handle,
|
| - scoped_refptr<base::TaskRunner> io_thread_task_runner,
|
| const base::Closure& callback,
|
| scoped_refptr<base::TaskRunner> callback_thread_task_runner) {
|
| - // TODO(vtl): Remove |io_thread_task_runner| argument.
|
| - DCHECK_EQ(io_thread_task_runner, io_thread_task_runner_);
|
| DCHECK(!callback.is_null());
|
| // (|callback_thread_task_runner| may be null.)
|
|
|
| @@ -121,9 +111,9 @@ scoped_refptr<MessagePipeDispatcher> ChannelManager::CreateChannel(
|
|
|
| scoped_refptr<Channel> ChannelManager::GetChannel(ChannelId channel_id) const {
|
| base::AutoLock locker(lock_);
|
| - auto it = channel_infos_.find(channel_id);
|
| - DCHECK(it != channel_infos_.end());
|
| - return it->second.channel;
|
| + auto it = channels_.find(channel_id);
|
| + DCHECK(it != channels_.end());
|
| + return it->second;
|
| }
|
|
|
| void ChannelManager::WillShutdownChannel(ChannelId channel_id) {
|
| @@ -131,34 +121,32 @@ void ChannelManager::WillShutdownChannel(ChannelId channel_id) {
|
| }
|
|
|
| void ChannelManager::ShutdownChannelOnIOThread(ChannelId channel_id) {
|
| - ChannelInfo channel_info;
|
| + scoped_refptr<Channel> channel;
|
| {
|
| base::AutoLock locker(lock_);
|
| - auto it = channel_infos_.find(channel_id);
|
| - DCHECK(it != channel_infos_.end());
|
| - channel_info.Swap(&it->second);
|
| - channel_infos_.erase(it);
|
| + auto it = channels_.find(channel_id);
|
| + DCHECK(it != channels_.end());
|
| + channel.swap(it->second);
|
| + channels_.erase(it);
|
| }
|
| - DCHECK(base::MessageLoopProxy::current() ==
|
| - channel_info.channel_thread_task_runner);
|
| - channel_info.channel->Shutdown();
|
| + channel->Shutdown();
|
| }
|
|
|
| void ChannelManager::ShutdownChannel(
|
| ChannelId channel_id,
|
| const base::Closure& callback,
|
| scoped_refptr<base::TaskRunner> callback_thread_task_runner) {
|
| - ChannelInfo channel_info;
|
| + scoped_refptr<Channel> channel;
|
| {
|
| base::AutoLock locker(lock_);
|
| - auto it = channel_infos_.find(channel_id);
|
| - DCHECK(it != channel_infos_.end());
|
| - channel_info.Swap(&it->second);
|
| - channel_infos_.erase(it);
|
| + auto it = channels_.find(channel_id);
|
| + DCHECK(it != channels_.end());
|
| + channel.swap(it->second);
|
| + channels_.erase(it);
|
| }
|
| - channel_info.channel->WillShutdownSoon();
|
| - bool ok = channel_info.channel_thread_task_runner->PostTask(
|
| - FROM_HERE, base::Bind(&ShutdownChannelHelper, channel_info, callback,
|
| + channel->WillShutdownSoon();
|
| + bool ok = io_thread_task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&ShutdownChannelHelper, channel, callback,
|
| callback_thread_task_runner));
|
| DCHECK(ok);
|
| }
|
| @@ -191,9 +179,8 @@ void ChannelManager::CreateChannelOnIOThreadHelper(
|
|
|
| {
|
| base::AutoLock locker(lock_);
|
| - CHECK(channel_infos_.find(channel_id) == channel_infos_.end());
|
| - channel_infos_[channel_id] =
|
| - ChannelInfo(channel, base::MessageLoopProxy::current());
|
| + CHECK(channels_.find(channel_id) == channels_.end());
|
| + channels_[channel_id] = channel;
|
| }
|
| channel->SetChannelManager(this);
|
| }
|
|
|