| Index: mojo/edk/system/data_pipe.cc
|
| diff --git a/mojo/edk/system/data_pipe.cc b/mojo/edk/system/data_pipe.cc
|
| index 9c54a09a6ebca6e19c3e09f24c15d5d4fe00c67a..63d79b50344bcf1f2b3800475ad6d240de50cdbe 100644
|
| --- a/mojo/edk/system/data_pipe.cc
|
| +++ b/mojo/edk/system/data_pipe.cc
|
| @@ -402,19 +402,20 @@ MojoResult DataPipe::ProducerAddAwakable(Awakable* awakable,
|
| HandleSignalsState producer_state = impl_->ProducerGetHandleSignalsState();
|
| if (signals_state)
|
| *signals_state = producer_state;
|
| - if (producer_state.satisfies(signals)) {
|
| - if (persistent)
|
| - producer_awakable_list_->Add(awakable, context, persistent, signals);
|
| - return MOJO_RESULT_ALREADY_EXISTS;
|
| + MojoResult rv = MOJO_RESULT_OK;
|
| + bool should_add = persistent;
|
| + if (producer_state.satisfies(signals))
|
| + rv = MOJO_RESULT_ALREADY_EXISTS;
|
| + else if (!producer_state.can_satisfy(signals))
|
| + rv = MOJO_RESULT_FAILED_PRECONDITION;
|
| + else
|
| + should_add = true;
|
| +
|
| + if (should_add) {
|
| + producer_awakable_list_->Add(awakable, context, persistent, signals,
|
| + producer_state);
|
| }
|
| - if (!producer_state.can_satisfy(signals)) {
|
| - if (persistent)
|
| - producer_awakable_list_->Add(awakable, context, persistent, signals);
|
| - return MOJO_RESULT_FAILED_PRECONDITION;
|
| - }
|
| -
|
| - producer_awakable_list_->Add(awakable, context, persistent, signals);
|
| - return MOJO_RESULT_OK;
|
| + return rv;
|
| }
|
|
|
| void DataPipe::ProducerRemoveAwakable(bool match_context,
|
| @@ -616,19 +617,20 @@ MojoResult DataPipe::ConsumerAddAwakable(Awakable* awakable,
|
| HandleSignalsState consumer_state = impl_->ConsumerGetHandleSignalsState();
|
| if (signals_state)
|
| *signals_state = consumer_state;
|
| - if (consumer_state.satisfies(signals)) {
|
| - if (persistent)
|
| - consumer_awakable_list_->Add(awakable, context, persistent, signals);
|
| - return MOJO_RESULT_ALREADY_EXISTS;
|
| + MojoResult rv = MOJO_RESULT_OK;
|
| + bool should_add = persistent;
|
| + if (consumer_state.satisfies(signals))
|
| + rv = MOJO_RESULT_ALREADY_EXISTS;
|
| + else if (!consumer_state.can_satisfy(signals))
|
| + rv = MOJO_RESULT_FAILED_PRECONDITION;
|
| + else
|
| + should_add = true;
|
| +
|
| + if (should_add) {
|
| + consumer_awakable_list_->Add(awakable, context, persistent, signals,
|
| + consumer_state);
|
| }
|
| - if (!consumer_state.can_satisfy(signals)) {
|
| - if (persistent)
|
| - consumer_awakable_list_->Add(awakable, context, persistent, signals);
|
| - return MOJO_RESULT_FAILED_PRECONDITION;
|
| - }
|
| -
|
| - consumer_awakable_list_->Add(awakable, context, persistent, signals);
|
| - return MOJO_RESULT_OK;
|
| + return rv;
|
| }
|
|
|
| void DataPipe::ConsumerRemoveAwakable(bool match_context,
|
|
|