| Index: third_party/mojo/src/mojo/edk/embedder/channel_init.cc
|
| diff --git a/third_party/mojo/src/mojo/edk/embedder/channel_init.cc b/third_party/mojo/src/mojo/edk/embedder/channel_init.cc
|
| index 9a0bfce6256bf72e2cd2fb1c9e36a9bf82306a78..0b6d76c54f67d05628990318388caed748fe2018 100644
|
| --- a/third_party/mojo/src/mojo/edk/embedder/channel_init.cc
|
| +++ b/third_party/mojo/src/mojo/edk/embedder/channel_init.cc
|
| @@ -15,6 +15,9 @@ ChannelInit::ChannelInit() : channel_info_(nullptr), weak_factory_(this) {
|
| }
|
|
|
| ChannelInit::~ChannelInit() {
|
| + // TODO(vtl): This is likely leaky in common scenarios (we're on the main
|
| + // thread, which outlives the I/O thread, and we're destroyed after the I/O
|
| + // thread is destroyed.
|
| if (channel_info_)
|
| DestroyChannel(channel_info_);
|
| }
|
| @@ -22,14 +25,12 @@ ChannelInit::~ChannelInit() {
|
| ScopedMessagePipeHandle ChannelInit::Init(
|
| base::PlatformFile file,
|
| scoped_refptr<base::TaskRunner> io_thread_task_runner) {
|
| - DCHECK(!io_thread_task_runner_); // Should only init once.
|
| - io_thread_task_runner_ = io_thread_task_runner;
|
| ScopedMessagePipeHandle message_pipe =
|
| - CreateChannel(
|
| - ScopedPlatformHandle(PlatformHandle(file)), io_thread_task_runner,
|
| - base::Bind(&ChannelInit::OnCreatedChannel, weak_factory_.GetWeakPtr(),
|
| - io_thread_task_runner),
|
| - base::MessageLoop::current()->message_loop_proxy()).Pass();
|
| + CreateChannel(ScopedPlatformHandle(PlatformHandle(file)),
|
| + io_thread_task_runner,
|
| + base::Bind(&ChannelInit::OnCreatedChannel,
|
| + weak_factory_.GetWeakPtr()),
|
| + base::MessageLoop::current()->task_runner()).Pass();
|
| return message_pipe.Pass();
|
| }
|
|
|
| @@ -40,7 +41,6 @@ void ChannelInit::WillDestroySoon() {
|
|
|
| // static
|
| void ChannelInit::OnCreatedChannel(base::WeakPtr<ChannelInit> self,
|
| - scoped_refptr<base::TaskRunner> io_thread,
|
| ChannelInfo* channel) {
|
| // If |self| was already destroyed, shut the channel down.
|
| if (!self) {
|
| @@ -48,6 +48,7 @@ void ChannelInit::OnCreatedChannel(base::WeakPtr<ChannelInit> self,
|
| return;
|
| }
|
|
|
| + DCHECK(!self->channel_info_);
|
| self->channel_info_ = channel;
|
| }
|
|
|
|
|