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

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

Issue 2084593005: Rationalize AddAwakable...() and RemoveAwakable...() methods. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: doh Created 4 years, 6 months 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
« no previous file with comments | « mojo/edk/system/dispatcher.h ('k') | mojo/edk/system/dispatcher_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/data_pipe_consumer_dispatcher.h" 9 #include "mojo/edk/system/data_pipe_consumer_dispatcher.h"
10 #include "mojo/edk/system/data_pipe_producer_dispatcher.h" 10 #include "mojo/edk/system/data_pipe_producer_dispatcher.h"
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 299
300 HandleSignalsState Dispatcher::GetHandleSignalsState() const { 300 HandleSignalsState Dispatcher::GetHandleSignalsState() const {
301 MutexLocker locker(&mutex_); 301 MutexLocker locker(&mutex_);
302 if (is_closed_) 302 if (is_closed_)
303 return HandleSignalsState(); 303 return HandleSignalsState();
304 304
305 return GetHandleSignalsStateImplNoLock(); 305 return GetHandleSignalsStateImplNoLock();
306 } 306 }
307 307
308 MojoResult Dispatcher::AddAwakable(Awakable* awakable, 308 MojoResult Dispatcher::AddAwakable(Awakable* awakable,
309 uint64_t context,
310 bool force,
309 MojoHandleSignals signals, 311 MojoHandleSignals signals,
310 uint64_t context,
311 HandleSignalsState* signals_state) { 312 HandleSignalsState* signals_state) {
312 MutexLocker locker(&mutex_); 313 MutexLocker locker(&mutex_);
313 if (is_closed_) { 314 if (is_closed_) {
314 if (signals_state) 315 if (signals_state)
315 *signals_state = HandleSignalsState(); 316 *signals_state = HandleSignalsState();
316 return MOJO_RESULT_INVALID_ARGUMENT; 317 return MOJO_RESULT_INVALID_ARGUMENT;
317 } 318 }
318 319
319 return AddAwakableImplNoLock(awakable, signals, false, context, 320 return AddAwakableImplNoLock(awakable, context, force, signals,
320 signals_state); 321 signals_state);
321 } 322 }
322 323
323 MojoResult Dispatcher::AddAwakableUnconditional( 324 void Dispatcher::RemoveAwakable(bool match_context,
324 Awakable* awakable, 325 Awakable* awakable,
325 MojoHandleSignals signals, 326 uint64_t context,
326 uint64_t context,
327 HandleSignalsState* signals_state) {
328 MutexLocker locker(&mutex_);
329 if (is_closed_) {
330 if (signals_state)
331 *signals_state = HandleSignalsState();
332 return MOJO_RESULT_INVALID_ARGUMENT;
333 }
334
335 return AddAwakableImplNoLock(awakable, signals, true, context, signals_state);
336 }
337
338 void Dispatcher::RemoveAwakable(Awakable* awakable,
339 HandleSignalsState* signals_state) { 327 HandleSignalsState* signals_state) {
340 MutexLocker locker(&mutex_); 328 MutexLocker locker(&mutex_);
341 if (is_closed_) { 329 if (is_closed_) {
342 if (signals_state) 330 if (signals_state)
343 *signals_state = HandleSignalsState(); 331 *signals_state = HandleSignalsState();
344 return; 332 return;
345 } 333 }
346 334
347 RemoveAwakableImplNoLock(awakable, signals_state); 335 RemoveAwakableImplNoLock(match_context, awakable, context, signals_state);
348 }
349
350 void Dispatcher::RemoveAwakableWithContext(Awakable* awakable,
351 uint64_t context,
352 HandleSignalsState* signals_state) {
353 MutexLocker locker(&mutex_);
354 if (is_closed_) {
355 if (signals_state)
356 *signals_state = HandleSignalsState();
357 return;
358 }
359
360 RemoveAwakableWithContextImplNoLock(awakable, context, signals_state);
361 } 336 }
362 337
363 Dispatcher::Dispatcher() : is_closed_(false) {} 338 Dispatcher::Dispatcher() : is_closed_(false) {}
364 339
365 Dispatcher::~Dispatcher() { 340 Dispatcher::~Dispatcher() {
366 // Make sure that |Close()| was called. 341 // Make sure that |Close()| was called.
367 DCHECK(is_closed_); 342 DCHECK(is_closed_);
368 } 343 }
369 344
370 void Dispatcher::CancelAllStateNoLock() { 345 void Dispatcher::CancelAllStateNoLock() {
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 HandleSignalsState Dispatcher::GetHandleSignalsStateImplNoLock() const { 536 HandleSignalsState Dispatcher::GetHandleSignalsStateImplNoLock() const {
562 mutex_.AssertHeld(); 537 mutex_.AssertHeld();
563 DCHECK(!is_closed_); 538 DCHECK(!is_closed_);
564 // By default, waiting isn't supported. Only dispatchers that can be waited on 539 // By default, waiting isn't supported. Only dispatchers that can be waited on
565 // will do something nontrivial. 540 // will do something nontrivial.
566 return HandleSignalsState(); 541 return HandleSignalsState();
567 } 542 }
568 543
569 MojoResult Dispatcher::AddAwakableImplNoLock( 544 MojoResult Dispatcher::AddAwakableImplNoLock(
570 Awakable* /*awakable*/, 545 Awakable* /*awakable*/,
546 uint64_t /*context*/,
547 bool /*force*/,
571 MojoHandleSignals /*signals*/, 548 MojoHandleSignals /*signals*/,
572 bool /*force*/,
573 uint64_t /*context*/,
574 HandleSignalsState* signals_state) { 549 HandleSignalsState* signals_state) {
575 mutex_.AssertHeld(); 550 mutex_.AssertHeld();
576 DCHECK(!is_closed_); 551 DCHECK(!is_closed_);
577 // By default, waiting isn't supported. Only dispatchers that can be waited on 552 // By default, waiting isn't supported. Only dispatchers that can be waited on
578 // will do something nontrivial. 553 // will do something nontrivial.
579 if (signals_state) 554 if (signals_state)
580 *signals_state = HandleSignalsState(); 555 *signals_state = HandleSignalsState();
581 return MOJO_RESULT_FAILED_PRECONDITION; 556 return MOJO_RESULT_FAILED_PRECONDITION;
582 } 557 }
583 558
584 void Dispatcher::RemoveAwakableImplNoLock(Awakable* /*awakable*/, 559 void Dispatcher::RemoveAwakableImplNoLock(bool /*match_context*/,
560 Awakable* /*awakable*/,
561 uint64_t /*context*/,
585 HandleSignalsState* signals_state) { 562 HandleSignalsState* signals_state) {
586 mutex_.AssertHeld(); 563 mutex_.AssertHeld();
587 DCHECK(!is_closed_); 564 DCHECK(!is_closed_);
588 // By default, waiting isn't supported. Only dispatchers that can be waited on 565 // By default, waiting isn't supported. Only dispatchers that can be waited on
589 // will do something nontrivial. 566 // will do something nontrivial.
590 if (signals_state) 567 if (signals_state)
591 *signals_state = HandleSignalsState(); 568 *signals_state = HandleSignalsState();
592 } 569 }
593 570
594 void Dispatcher::RemoveAwakableWithContextImplNoLock(
595 Awakable* /*awakable*/,
596 uint64_t /*context*/,
597 HandleSignalsState* signals_state) {
598 mutex_.AssertHeld();
599 DCHECK(!is_closed_);
600 // By default, waiting isn't supported. Only dispatchers that can be waited on
601 // will do something nontrivial.
602 if (signals_state)
603 *signals_state = HandleSignalsState();
604 }
605
606 void Dispatcher::StartSerializeImplNoLock(Channel* /*channel*/, 571 void Dispatcher::StartSerializeImplNoLock(Channel* /*channel*/,
607 size_t* max_size, 572 size_t* max_size,
608 size_t* max_platform_handles) { 573 size_t* max_platform_handles) {
609 AssertHasOneRef(); // Only one ref => no need to take the lock. 574 AssertHasOneRef(); // Only one ref => no need to take the lock.
610 DCHECK(!is_closed_); 575 DCHECK(!is_closed_);
611 *max_size = 0; 576 *max_size = 0;
612 *max_platform_handles = 0; 577 *max_platform_handles = 0;
613 } 578 }
614 579
615 bool Dispatcher::EndSerializeAndCloseImplNoLock( 580 bool Dispatcher::EndSerializeAndCloseImplNoLock(
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 // want to remove or weaken). 640 // want to remove or weaken).
676 MutexLocker locker(&mutex_); 641 MutexLocker locker(&mutex_);
677 #endif 642 #endif
678 643
679 return EndSerializeAndCloseImplNoLock(channel, destination, actual_size, 644 return EndSerializeAndCloseImplNoLock(channel, destination, actual_size,
680 platform_handles); 645 platform_handles);
681 } 646 }
682 647
683 } // namespace system 648 } // namespace system
684 } // namespace mojo 649 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/dispatcher.h ('k') | mojo/edk/system/dispatcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698