| Index: mojo/edk/system/node_controller.cc
|
| diff --git a/mojo/edk/system/node_controller.cc b/mojo/edk/system/node_controller.cc
|
| index 3733c6cc42285d2b308904e6afd5ca76cb5e7dd4..30b331f080fbffab9e76d81fe3356c5c35e18d87 100644
|
| --- a/mojo/edk/system/node_controller.cc
|
| +++ b/mojo/edk/system/node_controller.cc
|
| @@ -500,15 +500,20 @@ void NodeController::AcceptIncomingMessages() {
|
| void NodeController::DropAllPeers() {
|
| DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
|
|
|
| + std::vector<scoped_refptr<NodeChannel>> all_peers;
|
| {
|
| base::AutoLock lock(parent_lock_);
|
| if (bootstrap_parent_channel_) {
|
| - bootstrap_parent_channel_->ShutDown();
|
| - bootstrap_parent_channel_ = nullptr;
|
| + // |bootstrap_parent_channel_| isn't null'd here becuase we rely on its
|
| + // existence to determine whether or not this is the root node. Once
|
| + // bootstrap_parent_channel_->ShutDown() has been called,
|
| + // |bootstrap_parent_channel_| is essentially a dead object and it doesn't
|
| + // matter if it's deleted now or when |this| is deleted.
|
| + // Note: |bootstrap_parent_channel_| is only modified on the IO thread.
|
| + all_peers.push_back(bootstrap_parent_channel_);
|
| }
|
| }
|
|
|
| - std::vector<scoped_refptr<NodeChannel>> all_peers;
|
| {
|
| base::AutoLock lock(peers_lock_);
|
| for (const auto& peer : peers_)
|
|
|