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

Unified Diff: mojo/edk/system/data_pipe.cc

Issue 2090763002: AwakableList: For persistent awakables, make Add() call Awake() with reason INITIALIZE. (Closed) Base URL: https://github.com/domokit/mojo.git@work795_wait_set_4.7-x-work794_wait_set_4.6
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/edk/system/awakable_list_unittest.cc ('k') | mojo/edk/system/local_message_pipe_endpoint.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « mojo/edk/system/awakable_list_unittest.cc ('k') | mojo/edk/system/local_message_pipe_endpoint.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698