| Index: mojo/edk/system/data_pipe.cc
 | 
| diff --git a/mojo/edk/system/data_pipe.cc b/mojo/edk/system/data_pipe.cc
 | 
| index cbacb89815c168f2f59ca40dcaad7cc2152af906..2f433bdf9a5cd9eb91638a4647868124d1ca40df 100644
 | 
| --- a/mojo/edk/system/data_pipe.cc
 | 
| +++ b/mojo/edk/system/data_pipe.cc
 | 
| @@ -10,10 +10,10 @@
 | 
|  #include <limits>
 | 
|  
 | 
|  #include "base/logging.h"
 | 
| +#include "mojo/edk/system/awakable_list.h"
 | 
|  #include "mojo/edk/system/configuration.h"
 | 
|  #include "mojo/edk/system/memory.h"
 | 
|  #include "mojo/edk/system/options_validation.h"
 | 
| -#include "mojo/edk/system/waiter_list.h"
 | 
|  
 | 
|  namespace mojo {
 | 
|  namespace system {
 | 
| @@ -83,10 +83,10 @@ MojoResult DataPipe::ValidateCreateOptions(
 | 
|    return MOJO_RESULT_OK;
 | 
|  }
 | 
|  
 | 
| -void DataPipe::ProducerCancelAllWaiters() {
 | 
| +void DataPipe::ProducerCancelAllAwakables() {
 | 
|    base::AutoLock locker(lock_);
 | 
|    DCHECK(has_local_producer_no_lock());
 | 
| -  producer_waiter_list_->CancelAllWaiters();
 | 
| +  producer_awakable_list_->CancelAll();
 | 
|  }
 | 
|  
 | 
|  void DataPipe::ProducerClose() {
 | 
| @@ -94,13 +94,13 @@ void DataPipe::ProducerClose() {
 | 
|    DCHECK(producer_open_);
 | 
|    producer_open_ = false;
 | 
|    DCHECK(has_local_producer_no_lock());
 | 
| -  producer_waiter_list_.reset();
 | 
| +  producer_awakable_list_.reset();
 | 
|    // Not a bug, except possibly in "user" code.
 | 
|    DVLOG_IF(2, producer_in_two_phase_write_no_lock())
 | 
|        << "Producer closed with active two-phase write";
 | 
|    producer_two_phase_max_num_bytes_written_ = 0;
 | 
|    ProducerCloseImplNoLock();
 | 
| -  AwakeConsumerWaitersForStateChangeNoLock(
 | 
| +  AwakeConsumerAwakablesForStateChangeNoLock(
 | 
|        ConsumerGetHandleSignalsStateImplNoLock());
 | 
|  }
 | 
|  
 | 
| @@ -132,7 +132,7 @@ MojoResult DataPipe::ProducerWriteData(UserPointer<const void> elements,
 | 
|    HandleSignalsState new_consumer_state =
 | 
|        ConsumerGetHandleSignalsStateImplNoLock();
 | 
|    if (!new_consumer_state.equals(old_consumer_state))
 | 
| -    AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state);
 | 
| +    AwakeConsumerAwakablesForStateChangeNoLock(new_consumer_state);
 | 
|    return rv;
 | 
|  }
 | 
|  
 | 
| @@ -159,10 +159,10 @@ MojoResult DataPipe::ProducerBeginWriteData(
 | 
|                                                     min_num_bytes_to_write);
 | 
|    if (rv != MOJO_RESULT_OK)
 | 
|      return rv;
 | 
| -  // Note: No need to awake producer waiters, even though we're going from
 | 
| +  // Note: No need to awake producer awakables, even though we're going from
 | 
|    // writable to non-writable (since you can't wait on non-writability).
 | 
|    // Similarly, though this may have discarded data (in "may discard" mode),
 | 
| -  // making it non-readable, there's still no need to awake consumer waiters.
 | 
| +  // making it non-readable, there's still no need to awake consumer awakables.
 | 
|    DCHECK(producer_in_two_phase_write_no_lock());
 | 
|    return MOJO_RESULT_OK;
 | 
|  }
 | 
| @@ -189,15 +189,15 @@ MojoResult DataPipe::ProducerEndWriteData(uint32_t num_bytes_written) {
 | 
|    // Two-phase write ended even on failure.
 | 
|    DCHECK(!producer_in_two_phase_write_no_lock());
 | 
|    // If we're now writable, we *became* writable (since we weren't writable
 | 
| -  // during the two-phase write), so awake producer waiters.
 | 
| +  // during the two-phase write), so awake producer awakables.
 | 
|    HandleSignalsState new_producer_state =
 | 
|        ProducerGetHandleSignalsStateImplNoLock();
 | 
|    if (new_producer_state.satisfies(MOJO_HANDLE_SIGNAL_WRITABLE))
 | 
| -    AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
 | 
| +    AwakeProducerAwakablesForStateChangeNoLock(new_producer_state);
 | 
|    HandleSignalsState new_consumer_state =
 | 
|        ConsumerGetHandleSignalsStateImplNoLock();
 | 
|    if (!new_consumer_state.equals(old_consumer_state))
 | 
| -    AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state);
 | 
| +    AwakeConsumerAwakablesForStateChangeNoLock(new_consumer_state);
 | 
|    return rv;
 | 
|  }
 | 
|  
 | 
| @@ -207,10 +207,10 @@ HandleSignalsState DataPipe::ProducerGetHandleSignalsState() {
 | 
|    return ProducerGetHandleSignalsStateImplNoLock();
 | 
|  }
 | 
|  
 | 
| -MojoResult DataPipe::ProducerAddWaiter(Waiter* waiter,
 | 
| -                                       MojoHandleSignals signals,
 | 
| -                                       uint32_t context,
 | 
| -                                       HandleSignalsState* signals_state) {
 | 
| +MojoResult DataPipe::ProducerAddAwakable(Awakable* awakable,
 | 
| +                                         MojoHandleSignals signals,
 | 
| +                                         uint32_t context,
 | 
| +                                         HandleSignalsState* signals_state) {
 | 
|    base::AutoLock locker(lock_);
 | 
|    DCHECK(has_local_producer_no_lock());
 | 
|  
 | 
| @@ -226,15 +226,15 @@ MojoResult DataPipe::ProducerAddWaiter(Waiter* waiter,
 | 
|      return MOJO_RESULT_FAILED_PRECONDITION;
 | 
|    }
 | 
|  
 | 
| -  producer_waiter_list_->AddWaiter(waiter, signals, context);
 | 
| +  producer_awakable_list_->Add(awakable, signals, context);
 | 
|    return MOJO_RESULT_OK;
 | 
|  }
 | 
|  
 | 
| -void DataPipe::ProducerRemoveWaiter(Waiter* waiter,
 | 
| -                                    HandleSignalsState* signals_state) {
 | 
| +void DataPipe::ProducerRemoveAwakable(Awakable* awakable,
 | 
| +                                      HandleSignalsState* signals_state) {
 | 
|    base::AutoLock locker(lock_);
 | 
|    DCHECK(has_local_producer_no_lock());
 | 
| -  producer_waiter_list_->RemoveWaiter(waiter);
 | 
| +  producer_awakable_list_->Remove(awakable);
 | 
|    if (signals_state)
 | 
|      *signals_state = ProducerGetHandleSignalsStateImplNoLock();
 | 
|  }
 | 
| @@ -244,10 +244,10 @@ bool DataPipe::ProducerIsBusy() const {
 | 
|    return producer_in_two_phase_write_no_lock();
 | 
|  }
 | 
|  
 | 
| -void DataPipe::ConsumerCancelAllWaiters() {
 | 
| +void DataPipe::ConsumerCancelAllAwakables() {
 | 
|    base::AutoLock locker(lock_);
 | 
|    DCHECK(has_local_consumer_no_lock());
 | 
| -  consumer_waiter_list_->CancelAllWaiters();
 | 
| +  consumer_awakable_list_->CancelAll();
 | 
|  }
 | 
|  
 | 
|  void DataPipe::ConsumerClose() {
 | 
| @@ -255,13 +255,13 @@ void DataPipe::ConsumerClose() {
 | 
|    DCHECK(consumer_open_);
 | 
|    consumer_open_ = false;
 | 
|    DCHECK(has_local_consumer_no_lock());
 | 
| -  consumer_waiter_list_.reset();
 | 
| +  consumer_awakable_list_.reset();
 | 
|    // Not a bug, except possibly in "user" code.
 | 
|    DVLOG_IF(2, consumer_in_two_phase_read_no_lock())
 | 
|        << "Consumer closed with active two-phase read";
 | 
|    consumer_two_phase_max_num_bytes_read_ = 0;
 | 
|    ConsumerCloseImplNoLock();
 | 
| -  AwakeProducerWaitersForStateChangeNoLock(
 | 
| +  AwakeProducerAwakablesForStateChangeNoLock(
 | 
|        ProducerGetHandleSignalsStateImplNoLock());
 | 
|  }
 | 
|  
 | 
| @@ -291,7 +291,7 @@ MojoResult DataPipe::ConsumerReadData(UserPointer<void> elements,
 | 
|    HandleSignalsState new_producer_state =
 | 
|        ProducerGetHandleSignalsStateImplNoLock();
 | 
|    if (!new_producer_state.equals(old_producer_state))
 | 
| -    AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
 | 
| +    AwakeProducerAwakablesForStateChangeNoLock(new_producer_state);
 | 
|    return rv;
 | 
|  }
 | 
|  
 | 
| @@ -320,7 +320,7 @@ MojoResult DataPipe::ConsumerDiscardData(UserPointer<uint32_t> num_bytes,
 | 
|    HandleSignalsState new_producer_state =
 | 
|        ProducerGetHandleSignalsStateImplNoLock();
 | 
|    if (!new_producer_state.equals(old_producer_state))
 | 
| -    AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
 | 
| +    AwakeProducerAwakablesForStateChangeNoLock(new_producer_state);
 | 
|    return rv;
 | 
|  }
 | 
|  
 | 
| @@ -380,15 +380,15 @@ MojoResult DataPipe::ConsumerEndReadData(uint32_t num_bytes_read) {
 | 
|    // Two-phase read ended even on failure.
 | 
|    DCHECK(!consumer_in_two_phase_read_no_lock());
 | 
|    // If we're now readable, we *became* readable (since we weren't readable
 | 
| -  // during the two-phase read), so awake consumer waiters.
 | 
| +  // during the two-phase read), so awake consumer awakables.
 | 
|    HandleSignalsState new_consumer_state =
 | 
|        ConsumerGetHandleSignalsStateImplNoLock();
 | 
|    if (new_consumer_state.satisfies(MOJO_HANDLE_SIGNAL_READABLE))
 | 
| -    AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state);
 | 
| +    AwakeConsumerAwakablesForStateChangeNoLock(new_consumer_state);
 | 
|    HandleSignalsState new_producer_state =
 | 
|        ProducerGetHandleSignalsStateImplNoLock();
 | 
|    if (!new_producer_state.equals(old_producer_state))
 | 
| -    AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
 | 
| +    AwakeProducerAwakablesForStateChangeNoLock(new_producer_state);
 | 
|    return rv;
 | 
|  }
 | 
|  
 | 
| @@ -398,10 +398,10 @@ HandleSignalsState DataPipe::ConsumerGetHandleSignalsState() {
 | 
|    return ConsumerGetHandleSignalsStateImplNoLock();
 | 
|  }
 | 
|  
 | 
| -MojoResult DataPipe::ConsumerAddWaiter(Waiter* waiter,
 | 
| -                                       MojoHandleSignals signals,
 | 
| -                                       uint32_t context,
 | 
| -                                       HandleSignalsState* signals_state) {
 | 
| +MojoResult DataPipe::ConsumerAddAwakable(Awakable* awakable,
 | 
| +                                         MojoHandleSignals signals,
 | 
| +                                         uint32_t context,
 | 
| +                                         HandleSignalsState* signals_state) {
 | 
|    base::AutoLock locker(lock_);
 | 
|    DCHECK(has_local_consumer_no_lock());
 | 
|  
 | 
| @@ -417,15 +417,15 @@ MojoResult DataPipe::ConsumerAddWaiter(Waiter* waiter,
 | 
|      return MOJO_RESULT_FAILED_PRECONDITION;
 | 
|    }
 | 
|  
 | 
| -  consumer_waiter_list_->AddWaiter(waiter, signals, context);
 | 
| +  consumer_awakable_list_->Add(awakable, signals, context);
 | 
|    return MOJO_RESULT_OK;
 | 
|  }
 | 
|  
 | 
| -void DataPipe::ConsumerRemoveWaiter(Waiter* waiter,
 | 
| -                                    HandleSignalsState* signals_state) {
 | 
| +void DataPipe::ConsumerRemoveAwakable(Awakable* awakable,
 | 
| +                                      HandleSignalsState* signals_state) {
 | 
|    base::AutoLock locker(lock_);
 | 
|    DCHECK(has_local_consumer_no_lock());
 | 
| -  consumer_waiter_list_->RemoveWaiter(waiter);
 | 
| +  consumer_awakable_list_->Remove(awakable);
 | 
|    if (signals_state)
 | 
|      *signals_state = ConsumerGetHandleSignalsStateImplNoLock();
 | 
|  }
 | 
| @@ -444,8 +444,10 @@ DataPipe::DataPipe(bool has_local_producer,
 | 
|        capacity_num_bytes_(validated_options.capacity_num_bytes),
 | 
|        producer_open_(true),
 | 
|        consumer_open_(true),
 | 
| -      producer_waiter_list_(has_local_producer ? new WaiterList() : nullptr),
 | 
| -      consumer_waiter_list_(has_local_consumer ? new WaiterList() : nullptr),
 | 
| +      producer_awakable_list_(has_local_producer ? new AwakableList()
 | 
| +                                                 : nullptr),
 | 
| +      consumer_awakable_list_(has_local_consumer ? new AwakableList()
 | 
| +                                                 : nullptr),
 | 
|        producer_two_phase_max_num_bytes_written_(0),
 | 
|        consumer_two_phase_max_num_bytes_read_(0) {
 | 
|    // Check that the passed in options actually are validated.
 | 
| @@ -457,24 +459,24 @@ DataPipe::DataPipe(bool has_local_producer,
 | 
|  DataPipe::~DataPipe() {
 | 
|    DCHECK(!producer_open_);
 | 
|    DCHECK(!consumer_open_);
 | 
| -  DCHECK(!producer_waiter_list_);
 | 
| -  DCHECK(!consumer_waiter_list_);
 | 
| +  DCHECK(!producer_awakable_list_);
 | 
| +  DCHECK(!consumer_awakable_list_);
 | 
|  }
 | 
|  
 | 
| -void DataPipe::AwakeProducerWaitersForStateChangeNoLock(
 | 
| +void DataPipe::AwakeProducerAwakablesForStateChangeNoLock(
 | 
|      const HandleSignalsState& new_producer_state) {
 | 
|    lock_.AssertAcquired();
 | 
|    if (!has_local_producer_no_lock())
 | 
|      return;
 | 
| -  producer_waiter_list_->AwakeWaitersForStateChange(new_producer_state);
 | 
| +  producer_awakable_list_->AwakeForStateChange(new_producer_state);
 | 
|  }
 | 
|  
 | 
| -void DataPipe::AwakeConsumerWaitersForStateChangeNoLock(
 | 
| +void DataPipe::AwakeConsumerAwakablesForStateChangeNoLock(
 | 
|      const HandleSignalsState& new_consumer_state) {
 | 
|    lock_.AssertAcquired();
 | 
|    if (!has_local_consumer_no_lock())
 | 
|      return;
 | 
| -  consumer_waiter_list_->AwakeWaitersForStateChange(new_consumer_state);
 | 
| +  consumer_awakable_list_->AwakeForStateChange(new_consumer_state);
 | 
|  }
 | 
|  
 | 
|  }  // namespace system
 | 
| 
 |