| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ipc/ipc_sync_channel.h" | 5 #include "ipc/ipc_sync_channel.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 sync_dispatch_watcher_.reset(); | 207 sync_dispatch_watcher_.reset(); |
| 208 } | 208 } |
| 209 } | 209 } |
| 210 | 210 |
| 211 MojoEvent* dispatch_event() { return &dispatch_event_; } | 211 MojoEvent* dispatch_event() { return &dispatch_event_; } |
| 212 base::SingleThreadTaskRunner* listener_task_runner() { | 212 base::SingleThreadTaskRunner* listener_task_runner() { |
| 213 return listener_task_runner_.get(); | 213 return listener_task_runner_.get(); |
| 214 } | 214 } |
| 215 | 215 |
| 216 // Holds a pointer to the per-thread ReceivedSyncMsgQueue object. | 216 // Holds a pointer to the per-thread ReceivedSyncMsgQueue object. |
| 217 static base::LazyInstance<base::ThreadLocalPointer<ReceivedSyncMsgQueue> > | 217 static base::LazyInstance<base::ThreadLocalPointer<ReceivedSyncMsgQueue>>:: |
| 218 lazy_tls_ptr_; | 218 DestructorAtExit lazy_tls_ptr_; |
| 219 | 219 |
| 220 // Called on the ipc thread to check if we can unblock any current Send() | 220 // Called on the ipc thread to check if we can unblock any current Send() |
| 221 // calls based on a queued reply. | 221 // calls based on a queued reply. |
| 222 void DispatchReplies() { | 222 void DispatchReplies() { |
| 223 for (size_t i = 0; i < received_replies_.size(); ++i) { | 223 for (size_t i = 0; i < received_replies_.size(); ++i) { |
| 224 Message* message = received_replies_[i].message; | 224 Message* message = received_replies_[i].message; |
| 225 if (received_replies_[i].context->TryToUnblockListener(message)) { | 225 if (received_replies_[i].context->TryToUnblockListener(message)) { |
| 226 delete message; | 226 delete message; |
| 227 received_replies_.erase(received_replies_.begin() + i); | 227 received_replies_.erase(received_replies_.begin() + i); |
| 228 return; | 228 return; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 // If not null, the address of a flag to set when the dispatch event signals, | 305 // If not null, the address of a flag to set when the dispatch event signals, |
| 306 // in lieu of actually dispatching messages. This is used by | 306 // in lieu of actually dispatching messages. This is used by |
| 307 // SyncChannel::WaitForReply to restrict the scope of queued messages we're | 307 // SyncChannel::WaitForReply to restrict the scope of queued messages we're |
| 308 // allowed to process while it's waiting. | 308 // allowed to process while it's waiting. |
| 309 bool* dispatch_flag_ = nullptr; | 309 bool* dispatch_flag_ = nullptr; |
| 310 | 310 |
| 311 // Watches |dispatch_event_| during all sync handle watches on this thread. | 311 // Watches |dispatch_event_| during all sync handle watches on this thread. |
| 312 std::unique_ptr<mojo::SyncHandleWatcher> sync_dispatch_watcher_; | 312 std::unique_ptr<mojo::SyncHandleWatcher> sync_dispatch_watcher_; |
| 313 }; | 313 }; |
| 314 | 314 |
| 315 base::LazyInstance<base::ThreadLocalPointer<SyncChannel::ReceivedSyncMsgQueue> > | 315 base::LazyInstance<base::ThreadLocalPointer< |
| 316 SyncChannel::ReceivedSyncMsgQueue>>::DestructorAtExit |
| 316 SyncChannel::ReceivedSyncMsgQueue::lazy_tls_ptr_ = | 317 SyncChannel::ReceivedSyncMsgQueue::lazy_tls_ptr_ = |
| 317 LAZY_INSTANCE_INITIALIZER; | 318 LAZY_INSTANCE_INITIALIZER; |
| 318 | 319 |
| 319 SyncChannel::SyncContext::SyncContext( | 320 SyncChannel::SyncContext::SyncContext( |
| 320 Listener* listener, | 321 Listener* listener, |
| 321 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner, | 322 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner, |
| 322 WaitableEvent* shutdown_event) | 323 WaitableEvent* shutdown_event) |
| 323 : ChannelProxy::Context(listener, ipc_task_runner), | 324 : ChannelProxy::Context(listener, ipc_task_runner), |
| 324 received_sync_msgs_(ReceivedSyncMsgQueue::AddContext()), | 325 received_sync_msgs_(ReceivedSyncMsgQueue::AddContext()), |
| 325 shutdown_event_(shutdown_event), | 326 shutdown_event_(shutdown_event), |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 MOJO_HANDLE_SIGNAL_READABLE, | 694 MOJO_HANDLE_SIGNAL_READABLE, |
| 694 base::Bind(&SyncChannel::OnDispatchHandleReady, | 695 base::Bind(&SyncChannel::OnDispatchHandleReady, |
| 695 base::Unretained(this))); | 696 base::Unretained(this))); |
| 696 } | 697 } |
| 697 | 698 |
| 698 void SyncChannel::OnChannelInit() { | 699 void SyncChannel::OnChannelInit() { |
| 699 pre_init_sync_message_filters_.clear(); | 700 pre_init_sync_message_filters_.clear(); |
| 700 } | 701 } |
| 701 | 702 |
| 702 } // namespace IPC | 703 } // namespace IPC |
| OLD | NEW |