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

Unified Diff: mojo/system/data_pipe.cc

Issue 333713003: Mojo: Plumb wait flags state through DataPipe::Awake...WaitersForStateChangeNoLock(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: wrong change Created 6 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/system/data_pipe.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/system/data_pipe.cc
diff --git a/mojo/system/data_pipe.cc b/mojo/system/data_pipe.cc
index 2af15beb86213fb86d605a4caa8d0827e29e30b3..ebbb686c4799036ca342c72b0acae998dfee6998 100644
--- a/mojo/system/data_pipe.cc
+++ b/mojo/system/data_pipe.cc
@@ -90,7 +90,7 @@ void DataPipe::ProducerClose() {
<< "Producer closed with active two-phase write";
producer_two_phase_max_num_bytes_written_ = 0;
ProducerCloseImplNoLock();
- AwakeConsumerWaitersForStateChangeNoLock();
+ AwakeConsumerWaitersForStateChangeNoLock(ConsumerGetWaitFlagsStateNoLock());
}
MojoResult DataPipe::ProducerWriteData(const void* elements,
@@ -115,7 +115,7 @@ MojoResult DataPipe::ProducerWriteData(const void* elements,
MojoResult rv = ProducerWriteDataImplNoLock(elements, num_bytes, all_or_none);
WaitFlagsState new_consumer_state = ConsumerGetWaitFlagsStateNoLock();
if (!new_consumer_state.equals(old_consumer_state))
- AwakeConsumerWaitersForStateChangeNoLock();
+ AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state);
return rv;
}
@@ -167,11 +167,12 @@ MojoResult DataPipe::ProducerEndWriteData(uint32_t num_bytes_written) {
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.
- if (ProducerGetWaitFlagsStateNoLock().satisfies(MOJO_WAIT_FLAG_WRITABLE))
- AwakeProducerWaitersForStateChangeNoLock();
+ WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock();
+ if (new_producer_state.satisfies(MOJO_WAIT_FLAG_WRITABLE))
+ AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
WaitFlagsState new_consumer_state = ConsumerGetWaitFlagsStateNoLock();
if (!new_consumer_state.equals(old_consumer_state))
- AwakeConsumerWaitersForStateChangeNoLock();
+ AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state);
return rv;
}
@@ -219,7 +220,7 @@ void DataPipe::ConsumerClose() {
<< "Consumer closed with active two-phase read";
consumer_two_phase_max_num_bytes_read_ = 0;
ConsumerCloseImplNoLock();
- AwakeProducerWaitersForStateChangeNoLock();
+ AwakeProducerWaitersForStateChangeNoLock(ProducerGetWaitFlagsStateNoLock());
}
MojoResult DataPipe::ConsumerReadData(void* elements,
@@ -241,7 +242,7 @@ MojoResult DataPipe::ConsumerReadData(void* elements,
MojoResult rv = ConsumerReadDataImplNoLock(elements, num_bytes, all_or_none);
WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock();
if (!new_producer_state.equals(old_producer_state))
- AwakeProducerWaitersForStateChangeNoLock();
+ AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
return rv;
}
@@ -263,7 +264,7 @@ MojoResult DataPipe::ConsumerDiscardData(uint32_t* num_bytes,
MojoResult rv = ConsumerDiscardDataImplNoLock(num_bytes, all_or_none);
WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock();
if (!new_producer_state.equals(old_producer_state))
- AwakeProducerWaitersForStateChangeNoLock();
+ AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
return rv;
}
@@ -320,10 +321,10 @@ MojoResult DataPipe::ConsumerEndReadData(uint32_t num_bytes_read) {
// during the two-phase read), so awake consumer waiters.
WaitFlagsState new_consumer_state = ConsumerGetWaitFlagsStateNoLock();
if (new_consumer_state.satisfies(MOJO_WAIT_FLAG_READABLE))
- AwakeConsumerWaitersForStateChangeNoLock();
+ AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state);
WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock();
if (!new_producer_state.equals(old_producer_state))
- AwakeProducerWaitersForStateChangeNoLock();
+ AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
return rv;
}
@@ -380,20 +381,20 @@ DataPipe::~DataPipe() {
DCHECK(!consumer_waiter_list_);
}
-void DataPipe::AwakeProducerWaitersForStateChangeNoLock() {
+void DataPipe::AwakeProducerWaitersForStateChangeNoLock(
+ const WaitFlagsState& new_producer_state) {
lock_.AssertAcquired();
if (!has_local_producer_no_lock())
return;
- producer_waiter_list_->AwakeWaitersForStateChange(
- ProducerGetWaitFlagsStateNoLock());
+ producer_waiter_list_->AwakeWaitersForStateChange(new_producer_state);
}
-void DataPipe::AwakeConsumerWaitersForStateChangeNoLock() {
+void DataPipe::AwakeConsumerWaitersForStateChangeNoLock(
+ const WaitFlagsState& new_consumer_state) {
lock_.AssertAcquired();
if (!has_local_consumer_no_lock())
return;
- consumer_waiter_list_->AwakeWaitersForStateChange(
- ConsumerGetWaitFlagsStateNoLock());
+ consumer_waiter_list_->AwakeWaitersForStateChange(new_consumer_state);
}
} // namespace system
« no previous file with comments | « mojo/system/data_pipe.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698