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/message_pipe_dispatcher.h" | 5 #include "mojo/edk/system/message_pipe_dispatcher.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/stack_trace.h" | 8 #include "base/debug/stack_trace.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 return MOJO_RESULT_OK; | 611 return MOJO_RESULT_OK; |
612 } | 612 } |
613 | 613 |
614 MojoResult MessagePipeDispatcher::ReadMessageImplNoLock( | 614 MojoResult MessagePipeDispatcher::ReadMessageImplNoLock( |
615 void* bytes, | 615 void* bytes, |
616 uint32_t* num_bytes, | 616 uint32_t* num_bytes, |
617 DispatcherVector* dispatchers, | 617 DispatcherVector* dispatchers, |
618 uint32_t* num_dispatchers, | 618 uint32_t* num_dispatchers, |
619 MojoReadMessageFlags flags) { | 619 MojoReadMessageFlags flags) { |
620 lock().AssertAcquired(); | 620 lock().AssertAcquired(); |
621 if (channel_) { | 621 if (transferable_ && channel_) { |
622 channel_->EnsureLazyInitialized(); | 622 channel_->EnsureLazyInitialized(); |
623 } else if (!transferable_) { | 623 } else if (!transferable_) { |
624 if (non_transferable_state_ == WAITING_FOR_READ_OR_WRITE) { | 624 if (non_transferable_state_ == WAITING_FOR_READ_OR_WRITE) { |
625 RequestNontransferableChannel(); | 625 RequestNontransferableChannel(); |
626 return MOJO_RESULT_SHOULD_WAIT; | 626 return MOJO_RESULT_SHOULD_WAIT; |
627 } else if (non_transferable_state_ == CONNECT_CALLED) { | 627 } else if (non_transferable_state_ == CONNECT_CALLED) { |
628 return MOJO_RESULT_SHOULD_WAIT; | 628 return MOJO_RESULT_SHOULD_WAIT; |
629 } | 629 } |
630 } | 630 } |
631 | 631 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED; | 711 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED; |
712 return rv; | 712 return rv; |
713 } | 713 } |
714 | 714 |
715 MojoResult MessagePipeDispatcher::AddAwakableImplNoLock( | 715 MojoResult MessagePipeDispatcher::AddAwakableImplNoLock( |
716 Awakable* awakable, | 716 Awakable* awakable, |
717 MojoHandleSignals signals, | 717 MojoHandleSignals signals, |
718 uintptr_t context, | 718 uintptr_t context, |
719 HandleSignalsState* signals_state) { | 719 HandleSignalsState* signals_state) { |
720 lock().AssertAcquired(); | 720 lock().AssertAcquired(); |
721 if (channel_) { | 721 if (transferable_ && channel_) { |
722 channel_->EnsureLazyInitialized(); | 722 channel_->EnsureLazyInitialized(); |
723 } else if (!transferable_ && | 723 } else if (!transferable_ && |
724 non_transferable_state_ == WAITING_FOR_READ_OR_WRITE) { | 724 non_transferable_state_ == WAITING_FOR_READ_OR_WRITE) { |
725 RequestNontransferableChannel(); | 725 RequestNontransferableChannel(); |
726 } | 726 } |
727 | 727 |
728 HandleSignalsState state = GetHandleSignalsStateImplNoLock(); | 728 HandleSignalsState state = GetHandleSignalsStateImplNoLock(); |
729 if (state.satisfies(signals)) { | 729 if (state.satisfies(signals)) { |
730 if (signals_state) | 730 if (signals_state) |
731 *signals_state = state; | 731 *signals_state = state; |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 // PostTask since the broker can call us back synchronously. | 1000 // PostTask since the broker can call us back synchronously. |
1001 internal::g_io_thread_task_runner->PostTask( | 1001 internal::g_io_thread_task_runner->PostTask( |
1002 FROM_HERE, | 1002 FROM_HERE, |
1003 base::Bind(&Broker::ConnectMessagePipe, | 1003 base::Bind(&Broker::ConnectMessagePipe, |
1004 base::Unretained(internal::g_broker), pipe_id_, | 1004 base::Unretained(internal::g_broker), pipe_id_, |
1005 base::Unretained(this))); | 1005 base::Unretained(this))); |
1006 } | 1006 } |
1007 | 1007 |
1008 } // namespace edk | 1008 } // namespace edk |
1009 } // namespace mojo | 1009 } // namespace mojo |
OLD | NEW |