| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/logging.h" | 7 #include "base/logging.h" |
| 8 #include "mojo/edk/system/configuration.h" | 8 #include "mojo/edk/system/configuration.h" |
| 9 #include "mojo/edk/system/local_message_pipe_endpoint.h" | 9 #include "mojo/edk/system/local_message_pipe_endpoint.h" |
| 10 #include "mojo/edk/system/memory.h" | 10 #include "mojo/edk/system/memory.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 | 53 |
| 54 // Checks for fields beyond |flags|: | 54 // Checks for fields beyond |flags|: |
| 55 | 55 |
| 56 // (Nothing here yet.) | 56 // (Nothing here yet.) |
| 57 | 57 |
| 58 return MOJO_RESULT_OK; | 58 return MOJO_RESULT_OK; |
| 59 } | 59 } |
| 60 | 60 |
| 61 void MessagePipeDispatcher::Init(scoped_refptr<MessagePipe> message_pipe, | 61 void MessagePipeDispatcher::Init(scoped_refptr<MessagePipe> message_pipe, |
| 62 unsigned port) { | 62 unsigned port) { |
| 63 DCHECK(message_pipe.get()); | 63 DCHECK(message_pipe); |
| 64 DCHECK(port == 0 || port == 1); | 64 DCHECK(port == 0 || port == 1); |
| 65 | 65 |
| 66 message_pipe_ = message_pipe; | 66 message_pipe_ = message_pipe; |
| 67 port_ = port; | 67 port_ = port; |
| 68 } | 68 } |
| 69 | 69 |
| 70 Dispatcher::Type MessagePipeDispatcher::GetType() const { | 70 Dispatcher::Type MessagePipeDispatcher::GetType() const { |
| 71 return kTypeMessagePipe; | 71 return kTypeMessagePipe; |
| 72 } | 72 } |
| 73 | 73 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 85 | 85 |
| 86 // static | 86 // static |
| 87 scoped_refptr<MessagePipeDispatcher> MessagePipeDispatcher::Deserialize( | 87 scoped_refptr<MessagePipeDispatcher> MessagePipeDispatcher::Deserialize( |
| 88 Channel* channel, | 88 Channel* channel, |
| 89 const void* source, | 89 const void* source, |
| 90 size_t size) { | 90 size_t size) { |
| 91 unsigned port = kInvalidPort; | 91 unsigned port = kInvalidPort; |
| 92 scoped_refptr<MessagePipe> message_pipe; | 92 scoped_refptr<MessagePipe> message_pipe; |
| 93 if (!MessagePipe::Deserialize(channel, source, size, &message_pipe, &port)) | 93 if (!MessagePipe::Deserialize(channel, source, size, &message_pipe, &port)) |
| 94 return nullptr; | 94 return nullptr; |
| 95 DCHECK(message_pipe.get()); | 95 DCHECK(message_pipe); |
| 96 DCHECK(port == 0 || port == 1); | 96 DCHECK(port == 0 || port == 1); |
| 97 | 97 |
| 98 scoped_refptr<MessagePipeDispatcher> dispatcher( | 98 scoped_refptr<MessagePipeDispatcher> dispatcher( |
| 99 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); | 99 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); |
| 100 dispatcher->Init(message_pipe, port); | 100 dispatcher->Init(message_pipe, port); |
| 101 return dispatcher; | 101 return dispatcher; |
| 102 } | 102 } |
| 103 | 103 |
| 104 MessagePipeDispatcher::~MessagePipeDispatcher() { | 104 MessagePipeDispatcher::~MessagePipeDispatcher() { |
| 105 // |Close()|/|CloseImplNoLock()| should have taken care of the pipe. | 105 // |Close()|/|CloseImplNoLock()| should have taken care of the pipe. |
| 106 DCHECK(!message_pipe_.get()); | 106 DCHECK(!message_pipe_); |
| 107 } | 107 } |
| 108 | 108 |
| 109 MessagePipe* MessagePipeDispatcher::GetMessagePipeNoLock() const { | 109 MessagePipe* MessagePipeDispatcher::GetMessagePipeNoLock() const { |
| 110 lock().AssertAcquired(); | 110 lock().AssertAcquired(); |
| 111 return message_pipe_.get(); | 111 return message_pipe_.get(); |
| 112 } | 112 } |
| 113 | 113 |
| 114 unsigned MessagePipeDispatcher::GetPortNoLock() const { | 114 unsigned MessagePipeDispatcher::GetPortNoLock() const { |
| 115 lock().AssertAcquired(); | 115 lock().AssertAcquired(); |
| 116 return port_; | 116 return port_; |
| 117 } | 117 } |
| 118 | 118 |
| 119 void MessagePipeDispatcher::CancelAllWaitersNoLock() { | 119 void MessagePipeDispatcher::CancelAllAwakablesNoLock() { |
| 120 lock().AssertAcquired(); | 120 lock().AssertAcquired(); |
| 121 message_pipe_->CancelAllWaiters(port_); | 121 message_pipe_->CancelAllAwakables(port_); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void MessagePipeDispatcher::CloseImplNoLock() { | 124 void MessagePipeDispatcher::CloseImplNoLock() { |
| 125 lock().AssertAcquired(); | 125 lock().AssertAcquired(); |
| 126 message_pipe_->Close(port_); | 126 message_pipe_->Close(port_); |
| 127 message_pipe_ = nullptr; | 127 message_pipe_ = nullptr; |
| 128 port_ = kInvalidPort; | 128 port_ = kInvalidPort; |
| 129 } | 129 } |
| 130 | 130 |
| 131 scoped_refptr<Dispatcher> | 131 scoped_refptr<Dispatcher> |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 return message_pipe_->ReadMessage(port_, bytes, num_bytes, dispatchers, | 171 return message_pipe_->ReadMessage(port_, bytes, num_bytes, dispatchers, |
| 172 num_dispatchers, flags); | 172 num_dispatchers, flags); |
| 173 } | 173 } |
| 174 | 174 |
| 175 HandleSignalsState MessagePipeDispatcher::GetHandleSignalsStateImplNoLock() | 175 HandleSignalsState MessagePipeDispatcher::GetHandleSignalsStateImplNoLock() |
| 176 const { | 176 const { |
| 177 lock().AssertAcquired(); | 177 lock().AssertAcquired(); |
| 178 return message_pipe_->GetHandleSignalsState(port_); | 178 return message_pipe_->GetHandleSignalsState(port_); |
| 179 } | 179 } |
| 180 | 180 |
| 181 MojoResult MessagePipeDispatcher::AddWaiterImplNoLock( | 181 MojoResult MessagePipeDispatcher::AddAwakableImplNoLock( |
| 182 Waiter* waiter, | 182 Awakable* awakable, |
| 183 MojoHandleSignals signals, | 183 MojoHandleSignals signals, |
| 184 uint32_t context, | 184 uint32_t context, |
| 185 HandleSignalsState* signals_state) { | 185 HandleSignalsState* signals_state) { |
| 186 lock().AssertAcquired(); | 186 lock().AssertAcquired(); |
| 187 return message_pipe_->AddWaiter(port_, waiter, signals, context, | 187 return message_pipe_->AddAwakable(port_, awakable, signals, context, |
| 188 signals_state); | 188 signals_state); |
| 189 } | 189 } |
| 190 | 190 |
| 191 void MessagePipeDispatcher::RemoveWaiterImplNoLock( | 191 void MessagePipeDispatcher::RemoveAwakableImplNoLock( |
| 192 Waiter* waiter, | 192 Awakable* awakable, |
| 193 HandleSignalsState* signals_state) { | 193 HandleSignalsState* signals_state) { |
| 194 lock().AssertAcquired(); | 194 lock().AssertAcquired(); |
| 195 message_pipe_->RemoveWaiter(port_, waiter, signals_state); | 195 message_pipe_->RemoveAwakable(port_, awakable, signals_state); |
| 196 } | 196 } |
| 197 | 197 |
| 198 void MessagePipeDispatcher::StartSerializeImplNoLock( | 198 void MessagePipeDispatcher::StartSerializeImplNoLock( |
| 199 Channel* channel, | 199 Channel* channel, |
| 200 size_t* max_size, | 200 size_t* max_size, |
| 201 size_t* max_platform_handles) { | 201 size_t* max_platform_handles) { |
| 202 DCHECK(HasOneRef()); // Only one ref => no need to take the lock. | 202 DCHECK(HasOneRef()); // Only one ref => no need to take the lock. |
| 203 return message_pipe_->StartSerialize(port_, channel, max_size, | 203 return message_pipe_->StartSerialize(port_, channel, max_size, |
| 204 max_platform_handles); | 204 max_platform_handles); |
| 205 } | 205 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 221 // MessagePipeDispatcherTransport ---------------------------------------------- | 221 // MessagePipeDispatcherTransport ---------------------------------------------- |
| 222 | 222 |
| 223 MessagePipeDispatcherTransport::MessagePipeDispatcherTransport( | 223 MessagePipeDispatcherTransport::MessagePipeDispatcherTransport( |
| 224 DispatcherTransport transport) | 224 DispatcherTransport transport) |
| 225 : DispatcherTransport(transport) { | 225 : DispatcherTransport(transport) { |
| 226 DCHECK_EQ(message_pipe_dispatcher()->GetType(), Dispatcher::kTypeMessagePipe); | 226 DCHECK_EQ(message_pipe_dispatcher()->GetType(), Dispatcher::kTypeMessagePipe); |
| 227 } | 227 } |
| 228 | 228 |
| 229 } // namespace system | 229 } // namespace system |
| 230 } // namespace mojo | 230 } // namespace mojo |
| OLD | NEW |