| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/edk/system/broker_state.h" | 5 #include "mojo/edk/system/broker_state.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
| 9 #include "mojo/edk/embedder/embedder_internal.h" | 9 #include "mojo/edk/embedder/embedder_internal.h" |
| 10 #include "mojo/edk/embedder/platform_channel_pair.h" | 10 #include "mojo/edk/embedder/platform_channel_pair.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 pending_child_connects_.erase(pipe_id); | 95 pending_child_connects_.erase(pipe_id); |
| 96 return; | 96 return; |
| 97 } | 97 } |
| 98 | 98 |
| 99 pending_connects_[pipe_id] = message_pipe; | 99 pending_connects_[pipe_id] = message_pipe; |
| 100 } | 100 } |
| 101 | 101 |
| 102 void BrokerState::CloseMessagePipe(uint64_t pipe_id, | 102 void BrokerState::CloseMessagePipe(uint64_t pipe_id, |
| 103 MessagePipeDispatcher* message_pipe) { | 103 MessagePipeDispatcher* message_pipe) { |
| 104 DCHECK(internal::g_io_thread_task_runner->RunsTasksOnCurrentThread()); | 104 DCHECK(internal::g_io_thread_task_runner->RunsTasksOnCurrentThread()); |
| 105 base::AutoLock auto_lock(lock_); | |
| 106 | 105 |
| 107 CHECK(connected_pipes_.find(message_pipe) != connected_pipes_.end()); | 106 CHECK(connected_pipes_.find(message_pipe) != connected_pipes_.end()); |
| 108 connected_pipes_[message_pipe]->RemoveRoute(pipe_id); | 107 connected_pipes_[message_pipe]->RemoveRoute(pipe_id); |
| 109 connected_pipes_.erase(message_pipe); | 108 connected_pipes_.erase(message_pipe); |
| 110 } | 109 } |
| 111 | 110 |
| 112 void BrokerState::ChildBrokerHostCreated(ChildBrokerHost* child_broker_host) { | 111 void BrokerState::ChildBrokerHostCreated(ChildBrokerHost* child_broker_host) { |
| 113 base::AutoLock auto_lock(lock_); | 112 base::AutoLock auto_lock(lock_); |
| 114 CHECK(child_processes_.find(child_broker_host->GetProcessId()) == | 113 CHECK(child_processes_.find(child_broker_host->GetProcessId()) == |
| 115 child_processes_.end()); | 114 child_processes_.end()); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 | 227 |
| 229 void BrokerState::AttachMessagePipe(MessagePipeDispatcher* message_pipe, | 228 void BrokerState::AttachMessagePipe(MessagePipeDispatcher* message_pipe, |
| 230 uint64_t pipe_id, | 229 uint64_t pipe_id, |
| 231 RoutedRawChannel* raw_channel) { | 230 RoutedRawChannel* raw_channel) { |
| 232 connected_pipes_[message_pipe] = raw_channel; | 231 connected_pipes_[message_pipe] = raw_channel; |
| 233 // Note: we must call GotNonTransferableChannel before AddRoute because there | 232 // Note: we must call GotNonTransferableChannel before AddRoute because there |
| 234 // could be race conditions if the pipe got queued messages in |AddRoute| but | 233 // could be race conditions if the pipe got queued messages in |AddRoute| but |
| 235 // then when it's read it returns no messages because it doesn't have the | 234 // then when it's read it returns no messages because it doesn't have the |
| 236 // channel yet. | 235 // channel yet. |
| 237 message_pipe->GotNonTransferableChannel(raw_channel->channel()); | 236 message_pipe->GotNonTransferableChannel(raw_channel->channel()); |
| 238 raw_channel->AddRoute(pipe_id, message_pipe); | 237 // The above call could have caused |CloseMessagePipe| to be called. |
| 238 if (connected_pipes_.find(message_pipe) != connected_pipes_.end()) |
| 239 raw_channel->AddRoute(pipe_id, message_pipe); |
| 239 } | 240 } |
| 240 | 241 |
| 241 } // namespace edk | 242 } // namespace edk |
| 242 } // namespace mojo | 243 } // namespace mojo |
| OLD | NEW |