Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: mojo/edk/system/dispatcher.cc

Issue 782693004: Update mojo sdk to rev f6c8ec07c01deebc13178d516225fd12695c3dc2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: hack mojo_system_impl gypi for android :| Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/dispatcher.h" 5 #include "mojo/edk/system/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/message_pipe_dispatcher.h" 9 #include "mojo/edk/system/message_pipe_dispatcher.h"
10 #include "mojo/edk/system/platform_handle_dispatcher.h" 10 #include "mojo/edk/system/platform_handle_dispatcher.h"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 } 213 }
214 214
215 HandleSignalsState Dispatcher::GetHandleSignalsState() const { 215 HandleSignalsState Dispatcher::GetHandleSignalsState() const {
216 base::AutoLock locker(lock_); 216 base::AutoLock locker(lock_);
217 if (is_closed_) 217 if (is_closed_)
218 return HandleSignalsState(); 218 return HandleSignalsState();
219 219
220 return GetHandleSignalsStateImplNoLock(); 220 return GetHandleSignalsStateImplNoLock();
221 } 221 }
222 222
223 MojoResult Dispatcher::AddWaiter(Waiter* waiter, 223 MojoResult Dispatcher::AddAwakable(Awakable* awakable,
224 MojoHandleSignals signals, 224 MojoHandleSignals signals,
225 uint32_t context, 225 uint32_t context,
226 HandleSignalsState* signals_state) { 226 HandleSignalsState* signals_state) {
227 base::AutoLock locker(lock_); 227 base::AutoLock locker(lock_);
228 if (is_closed_) { 228 if (is_closed_) {
229 if (signals_state) 229 if (signals_state)
230 *signals_state = HandleSignalsState(); 230 *signals_state = HandleSignalsState();
231 return MOJO_RESULT_INVALID_ARGUMENT; 231 return MOJO_RESULT_INVALID_ARGUMENT;
232 } 232 }
233 233
234 return AddWaiterImplNoLock(waiter, signals, context, signals_state); 234 return AddAwakableImplNoLock(awakable, signals, context, signals_state);
235 } 235 }
236 236
237 void Dispatcher::RemoveWaiter(Waiter* waiter, 237 void Dispatcher::RemoveAwakable(Awakable* awakable,
238 HandleSignalsState* handle_signals_state) { 238 HandleSignalsState* handle_signals_state) {
239 base::AutoLock locker(lock_); 239 base::AutoLock locker(lock_);
240 if (is_closed_) { 240 if (is_closed_) {
241 if (handle_signals_state) 241 if (handle_signals_state)
242 *handle_signals_state = HandleSignalsState(); 242 *handle_signals_state = HandleSignalsState();
243 return; 243 return;
244 } 244 }
245 RemoveWaiterImplNoLock(waiter, handle_signals_state); 245
246 RemoveAwakableImplNoLock(awakable, handle_signals_state);
246 } 247 }
247 248
248 Dispatcher::Dispatcher() : is_closed_(false) { 249 Dispatcher::Dispatcher() : is_closed_(false) {
249 } 250 }
250 251
251 Dispatcher::~Dispatcher() { 252 Dispatcher::~Dispatcher() {
252 // Make sure that |Close()| was called. 253 // Make sure that |Close()| was called.
253 DCHECK(is_closed_); 254 DCHECK(is_closed_);
254 } 255 }
255 256
256 void Dispatcher::CancelAllWaitersNoLock() { 257 void Dispatcher::CancelAllAwakablesNoLock() {
257 lock_.AssertAcquired(); 258 lock_.AssertAcquired();
258 DCHECK(is_closed_); 259 DCHECK(is_closed_);
259 // By default, waiting isn't supported. Only dispatchers that can be waited on 260 // By default, waiting isn't supported. Only dispatchers that can be waited on
260 // will do something nontrivial. 261 // will do something nontrivial.
261 } 262 }
262 263
263 void Dispatcher::CloseImplNoLock() { 264 void Dispatcher::CloseImplNoLock() {
264 lock_.AssertAcquired(); 265 lock_.AssertAcquired();
265 DCHECK(is_closed_); 266 DCHECK(is_closed_);
266 // This may not need to do anything. Dispatchers should override this to do 267 // This may not need to do anything. Dispatchers should override this to do
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 } 364 }
364 365
365 HandleSignalsState Dispatcher::GetHandleSignalsStateImplNoLock() const { 366 HandleSignalsState Dispatcher::GetHandleSignalsStateImplNoLock() const {
366 lock_.AssertAcquired(); 367 lock_.AssertAcquired();
367 DCHECK(!is_closed_); 368 DCHECK(!is_closed_);
368 // By default, waiting isn't supported. Only dispatchers that can be waited on 369 // By default, waiting isn't supported. Only dispatchers that can be waited on
369 // will do something nontrivial. 370 // will do something nontrivial.
370 return HandleSignalsState(); 371 return HandleSignalsState();
371 } 372 }
372 373
373 MojoResult Dispatcher::AddWaiterImplNoLock(Waiter* /*waiter*/, 374 MojoResult Dispatcher::AddAwakableImplNoLock(
374 MojoHandleSignals /*signals*/, 375 Awakable* /*awakable*/,
375 uint32_t /*context*/, 376 MojoHandleSignals /*signals*/,
376 HandleSignalsState* signals_state) { 377 uint32_t /*context*/,
378 HandleSignalsState* signals_state) {
377 lock_.AssertAcquired(); 379 lock_.AssertAcquired();
378 DCHECK(!is_closed_); 380 DCHECK(!is_closed_);
379 // By default, waiting isn't supported. Only dispatchers that can be waited on 381 // By default, waiting isn't supported. Only dispatchers that can be waited on
380 // will do something nontrivial. 382 // will do something nontrivial.
381 if (signals_state) 383 if (signals_state)
382 *signals_state = HandleSignalsState(); 384 *signals_state = HandleSignalsState();
383 return MOJO_RESULT_FAILED_PRECONDITION; 385 return MOJO_RESULT_FAILED_PRECONDITION;
384 } 386 }
385 387
386 void Dispatcher::RemoveWaiterImplNoLock(Waiter* /*waiter*/, 388 void Dispatcher::RemoveAwakableImplNoLock(Awakable* /*awakable*/,
387 HandleSignalsState* signals_state) { 389 HandleSignalsState* signals_state) {
388 lock_.AssertAcquired(); 390 lock_.AssertAcquired();
389 DCHECK(!is_closed_); 391 DCHECK(!is_closed_);
390 // By default, waiting isn't supported. Only dispatchers that can be waited on 392 // By default, waiting isn't supported. Only dispatchers that can be waited on
391 // will do something nontrivial. 393 // will do something nontrivial.
392 if (signals_state) 394 if (signals_state)
393 *signals_state = HandleSignalsState(); 395 *signals_state = HandleSignalsState();
394 } 396 }
395 397
396 void Dispatcher::StartSerializeImplNoLock(Channel* /*channel*/, 398 void Dispatcher::StartSerializeImplNoLock(Channel* /*channel*/,
397 size_t* max_size, 399 size_t* max_size,
(...skipping 22 matching lines...) Expand all
420 // Most dispatchers support only "atomic" operations, so they are never busy 422 // Most dispatchers support only "atomic" operations, so they are never busy
421 // (in this sense). 423 // (in this sense).
422 return false; 424 return false;
423 } 425 }
424 426
425 void Dispatcher::CloseNoLock() { 427 void Dispatcher::CloseNoLock() {
426 lock_.AssertAcquired(); 428 lock_.AssertAcquired();
427 DCHECK(!is_closed_); 429 DCHECK(!is_closed_);
428 430
429 is_closed_ = true; 431 is_closed_ = true;
430 CancelAllWaitersNoLock(); 432 CancelAllAwakablesNoLock();
431 CloseImplNoLock(); 433 CloseImplNoLock();
432 } 434 }
433 435
434 scoped_refptr<Dispatcher> 436 scoped_refptr<Dispatcher>
435 Dispatcher::CreateEquivalentDispatcherAndCloseNoLock() { 437 Dispatcher::CreateEquivalentDispatcherAndCloseNoLock() {
436 lock_.AssertAcquired(); 438 lock_.AssertAcquired();
437 DCHECK(!is_closed_); 439 DCHECK(!is_closed_);
438 440
439 is_closed_ = true; 441 is_closed_ = true;
440 CancelAllWaitersNoLock(); 442 CancelAllAwakablesNoLock();
441 return CreateEquivalentDispatcherAndCloseImplNoLock(); 443 return CreateEquivalentDispatcherAndCloseImplNoLock();
442 } 444 }
443 445
444 void Dispatcher::StartSerialize(Channel* channel, 446 void Dispatcher::StartSerialize(Channel* channel,
445 size_t* max_size, 447 size_t* max_size,
446 size_t* max_platform_handles) { 448 size_t* max_platform_handles) {
447 DCHECK(channel); 449 DCHECK(channel);
448 DCHECK(max_size); 450 DCHECK(max_size);
449 DCHECK(max_platform_handles); 451 DCHECK(max_platform_handles);
450 DCHECK(HasOneRef()); // Only one ref => no need to take the lock. 452 DCHECK(HasOneRef()); // Only one ref => no need to take the lock.
(...skipping 30 matching lines...) Expand all
481 // DispatcherTransport --------------------------------------------------------- 483 // DispatcherTransport ---------------------------------------------------------
482 484
483 void DispatcherTransport::End() { 485 void DispatcherTransport::End() {
484 DCHECK(dispatcher_); 486 DCHECK(dispatcher_);
485 dispatcher_->lock_.Release(); 487 dispatcher_->lock_.Release();
486 dispatcher_ = nullptr; 488 dispatcher_ = nullptr;
487 } 489 }
488 490
489 } // namespace system 491 } // namespace system
490 } // namespace mojo 492 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698