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

Side by Side Diff: mojo/edk/system/data_pipe.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/data_pipe.h ('k') | mojo/edk/system/data_pipe_consumer_dispatcher.h » ('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/data_pipe.h" 5 #include "mojo/edk/system/data_pipe.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 return rv; 385 return rv;
386 } 386 }
387 387
388 HandleSignalsState DataPipe::ProducerGetHandleSignalsState() { 388 HandleSignalsState DataPipe::ProducerGetHandleSignalsState() {
389 MutexLocker locker(&mutex_); 389 MutexLocker locker(&mutex_);
390 DCHECK(has_local_producer_no_lock()); 390 DCHECK(has_local_producer_no_lock());
391 return impl_->ProducerGetHandleSignalsState(); 391 return impl_->ProducerGetHandleSignalsState();
392 } 392 }
393 393
394 MojoResult DataPipe::ProducerAddAwakable(Awakable* awakable, 394 MojoResult DataPipe::ProducerAddAwakable(Awakable* awakable,
395 uint64_t context,
396 bool force,
395 MojoHandleSignals signals, 397 MojoHandleSignals signals,
396 bool force,
397 uint64_t context,
398 HandleSignalsState* signals_state) { 398 HandleSignalsState* signals_state) {
399 MutexLocker locker(&mutex_); 399 MutexLocker locker(&mutex_);
400 DCHECK(has_local_producer_no_lock()); 400 DCHECK(has_local_producer_no_lock());
401 401
402 HandleSignalsState producer_state = impl_->ProducerGetHandleSignalsState(); 402 HandleSignalsState producer_state = impl_->ProducerGetHandleSignalsState();
403 if (signals_state) 403 if (signals_state)
404 *signals_state = producer_state; 404 *signals_state = producer_state;
405 if (producer_state.satisfies(signals)) { 405 if (producer_state.satisfies(signals)) {
406 if (force) 406 if (force)
407 producer_awakable_list_->Add(awakable, signals, context); 407 producer_awakable_list_->Add(awakable, context, signals);
408 return MOJO_RESULT_ALREADY_EXISTS; 408 return MOJO_RESULT_ALREADY_EXISTS;
409 } 409 }
410 if (!producer_state.can_satisfy(signals)) 410 if (!producer_state.can_satisfy(signals)) {
411 if (force)
412 producer_awakable_list_->Add(awakable, context, signals);
411 return MOJO_RESULT_FAILED_PRECONDITION; 413 return MOJO_RESULT_FAILED_PRECONDITION;
414 }
412 415
413 producer_awakable_list_->Add(awakable, signals, context); 416 producer_awakable_list_->Add(awakable, context, signals);
414 return MOJO_RESULT_OK; 417 return MOJO_RESULT_OK;
415 } 418 }
416 419
417 void DataPipe::ProducerRemoveAwakable(Awakable* awakable, 420 void DataPipe::ProducerRemoveAwakable(bool match_context,
421 Awakable* awakable,
422 uint64_t context,
418 HandleSignalsState* signals_state) { 423 HandleSignalsState* signals_state) {
419 MutexLocker locker(&mutex_); 424 MutexLocker locker(&mutex_);
420 DCHECK(has_local_producer_no_lock()); 425 DCHECK(has_local_producer_no_lock());
421 producer_awakable_list_->Remove(awakable); 426 producer_awakable_list_->Remove(match_context, awakable, context);
422 if (signals_state) 427 if (signals_state)
423 *signals_state = impl_->ProducerGetHandleSignalsState(); 428 *signals_state = impl_->ProducerGetHandleSignalsState();
424 } 429 }
425
426 void DataPipe::ProducerRemoveAwakableWithContext(
427 Awakable* awakable,
428 uint64_t context,
429 HandleSignalsState* signals_state) {
430 MutexLocker locker(&mutex_);
431 DCHECK(has_local_producer_no_lock());
432 producer_awakable_list_->RemoveWithContext(awakable, context);
433 if (signals_state)
434 *signals_state = impl_->ProducerGetHandleSignalsState();
435 }
436 430
437 void DataPipe::ProducerStartSerialize(Channel* channel, 431 void DataPipe::ProducerStartSerialize(Channel* channel,
438 size_t* max_size, 432 size_t* max_size,
439 size_t* max_platform_handles) { 433 size_t* max_platform_handles) {
440 MutexLocker locker(&mutex_); 434 MutexLocker locker(&mutex_);
441 DCHECK(has_local_producer_no_lock()); 435 DCHECK(has_local_producer_no_lock());
442 impl_->ProducerStartSerialize(channel, max_size, max_platform_handles); 436 impl_->ProducerStartSerialize(channel, max_size, max_platform_handles);
443 } 437 }
444 438
445 bool DataPipe::ProducerEndSerialize( 439 bool DataPipe::ProducerEndSerialize(
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 return rv; 599 return rv;
606 } 600 }
607 601
608 HandleSignalsState DataPipe::ConsumerGetHandleSignalsState() { 602 HandleSignalsState DataPipe::ConsumerGetHandleSignalsState() {
609 MutexLocker locker(&mutex_); 603 MutexLocker locker(&mutex_);
610 DCHECK(has_local_consumer_no_lock()); 604 DCHECK(has_local_consumer_no_lock());
611 return impl_->ConsumerGetHandleSignalsState(); 605 return impl_->ConsumerGetHandleSignalsState();
612 } 606 }
613 607
614 MojoResult DataPipe::ConsumerAddAwakable(Awakable* awakable, 608 MojoResult DataPipe::ConsumerAddAwakable(Awakable* awakable,
609 uint64_t context,
610 bool force,
615 MojoHandleSignals signals, 611 MojoHandleSignals signals,
616 bool force,
617 uint64_t context,
618 HandleSignalsState* signals_state) { 612 HandleSignalsState* signals_state) {
619 MutexLocker locker(&mutex_); 613 MutexLocker locker(&mutex_);
620 DCHECK(has_local_consumer_no_lock()); 614 DCHECK(has_local_consumer_no_lock());
621 615
622 HandleSignalsState consumer_state = impl_->ConsumerGetHandleSignalsState(); 616 HandleSignalsState consumer_state = impl_->ConsumerGetHandleSignalsState();
623 if (signals_state) 617 if (signals_state)
624 *signals_state = consumer_state; 618 *signals_state = consumer_state;
625 if (consumer_state.satisfies(signals)) { 619 if (consumer_state.satisfies(signals)) {
626 if (force) 620 if (force)
627 consumer_awakable_list_->Add(awakable, signals, context); 621 consumer_awakable_list_->Add(awakable, context, signals);
628 return MOJO_RESULT_ALREADY_EXISTS; 622 return MOJO_RESULT_ALREADY_EXISTS;
629 } 623 }
630 if (!consumer_state.can_satisfy(signals)) 624 if (!consumer_state.can_satisfy(signals)) {
625 if (force)
626 consumer_awakable_list_->Add(awakable, context, signals);
631 return MOJO_RESULT_FAILED_PRECONDITION; 627 return MOJO_RESULT_FAILED_PRECONDITION;
628 }
632 629
633 consumer_awakable_list_->Add(awakable, signals, context); 630 consumer_awakable_list_->Add(awakable, context, signals);
634 return MOJO_RESULT_OK; 631 return MOJO_RESULT_OK;
635 } 632 }
636 633
637 void DataPipe::ConsumerRemoveAwakable(Awakable* awakable, 634 void DataPipe::ConsumerRemoveAwakable(bool match_context,
635 Awakable* awakable,
636 uint64_t context,
638 HandleSignalsState* signals_state) { 637 HandleSignalsState* signals_state) {
639 MutexLocker locker(&mutex_); 638 MutexLocker locker(&mutex_);
640 DCHECK(has_local_consumer_no_lock()); 639 DCHECK(has_local_consumer_no_lock());
641 consumer_awakable_list_->Remove(awakable); 640 consumer_awakable_list_->Remove(match_context, awakable, context);
642 if (signals_state) 641 if (signals_state)
643 *signals_state = impl_->ConsumerGetHandleSignalsState(); 642 *signals_state = impl_->ConsumerGetHandleSignalsState();
644 } 643 }
645
646 void DataPipe::ConsumerRemoveAwakableWithContext(
647 Awakable* awakable,
648 uint64_t context,
649 HandleSignalsState* signals_state) {
650 MutexLocker locker(&mutex_);
651 DCHECK(has_local_consumer_no_lock());
652 consumer_awakable_list_->RemoveWithContext(awakable, context);
653 if (signals_state)
654 *signals_state = impl_->ConsumerGetHandleSignalsState();
655 }
656 644
657 void DataPipe::ConsumerStartSerialize(Channel* channel, 645 void DataPipe::ConsumerStartSerialize(Channel* channel,
658 size_t* max_size, 646 size_t* max_size,
659 size_t* max_platform_handles) { 647 size_t* max_platform_handles) {
660 MutexLocker locker(&mutex_); 648 MutexLocker locker(&mutex_);
661 DCHECK(has_local_consumer_no_lock()); 649 DCHECK(has_local_consumer_no_lock());
662 impl_->ConsumerStartSerialize(channel, max_size, max_platform_handles); 650 impl_->ConsumerStartSerialize(channel, max_size, max_platform_handles);
663 } 651 }
664 652
665 bool DataPipe::ConsumerEndSerialize( 653 bool DataPipe::ConsumerEndSerialize(
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 SetProducerClosedNoLock(); 843 SetProducerClosedNoLock();
856 } 844 }
857 845
858 void DataPipe::SetConsumerClosed() { 846 void DataPipe::SetConsumerClosed() {
859 MutexLocker locker(&mutex_); 847 MutexLocker locker(&mutex_);
860 SetConsumerClosedNoLock(); 848 SetConsumerClosedNoLock();
861 } 849 }
862 850
863 } // namespace system 851 } // namespace system
864 } // namespace mojo 852 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/data_pipe.h ('k') | mojo/edk/system/data_pipe_consumer_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698