OLD | NEW |
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/system/data_pipe.h" | 5 #include "mojo/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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock(); | 170 WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock(); |
171 if (new_producer_state.satisfies(MOJO_WAIT_FLAG_WRITABLE)) | 171 if (new_producer_state.satisfies(MOJO_WAIT_FLAG_WRITABLE)) |
172 AwakeProducerWaitersForStateChangeNoLock(new_producer_state); | 172 AwakeProducerWaitersForStateChangeNoLock(new_producer_state); |
173 WaitFlagsState new_consumer_state = ConsumerGetWaitFlagsStateNoLock(); | 173 WaitFlagsState new_consumer_state = ConsumerGetWaitFlagsStateNoLock(); |
174 if (!new_consumer_state.equals(old_consumer_state)) | 174 if (!new_consumer_state.equals(old_consumer_state)) |
175 AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state); | 175 AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state); |
176 return rv; | 176 return rv; |
177 } | 177 } |
178 | 178 |
179 MojoResult DataPipe::ProducerAddWaiter(Waiter* waiter, | 179 MojoResult DataPipe::ProducerAddWaiter(Waiter* waiter, |
180 MojoWaitFlags flags, | 180 MojoHandleSignals signals, |
181 uint32_t context) { | 181 uint32_t context) { |
182 base::AutoLock locker(lock_); | 182 base::AutoLock locker(lock_); |
183 DCHECK(has_local_producer_no_lock()); | 183 DCHECK(has_local_producer_no_lock()); |
184 | 184 |
185 WaitFlagsState producer_state = ProducerGetWaitFlagsStateNoLock(); | 185 WaitFlagsState producer_state = ProducerGetWaitFlagsStateNoLock(); |
186 if (producer_state.satisfies(flags)) | 186 if (producer_state.satisfies(signals)) |
187 return MOJO_RESULT_ALREADY_EXISTS; | 187 return MOJO_RESULT_ALREADY_EXISTS; |
188 if (!producer_state.can_satisfy(flags)) | 188 if (!producer_state.can_satisfy(signals)) |
189 return MOJO_RESULT_FAILED_PRECONDITION; | 189 return MOJO_RESULT_FAILED_PRECONDITION; |
190 | 190 |
191 producer_waiter_list_->AddWaiter(waiter, flags, context); | 191 producer_waiter_list_->AddWaiter(waiter, signals, context); |
192 return MOJO_RESULT_OK; | 192 return MOJO_RESULT_OK; |
193 } | 193 } |
194 | 194 |
195 void DataPipe::ProducerRemoveWaiter(Waiter* waiter) { | 195 void DataPipe::ProducerRemoveWaiter(Waiter* waiter) { |
196 base::AutoLock locker(lock_); | 196 base::AutoLock locker(lock_); |
197 DCHECK(has_local_producer_no_lock()); | 197 DCHECK(has_local_producer_no_lock()); |
198 producer_waiter_list_->RemoveWaiter(waiter); | 198 producer_waiter_list_->RemoveWaiter(waiter); |
199 } | 199 } |
200 | 200 |
201 bool DataPipe::ProducerIsBusy() const { | 201 bool DataPipe::ProducerIsBusy() const { |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 WaitFlagsState new_consumer_state = ConsumerGetWaitFlagsStateNoLock(); | 322 WaitFlagsState new_consumer_state = ConsumerGetWaitFlagsStateNoLock(); |
323 if (new_consumer_state.satisfies(MOJO_WAIT_FLAG_READABLE)) | 323 if (new_consumer_state.satisfies(MOJO_WAIT_FLAG_READABLE)) |
324 AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state); | 324 AwakeConsumerWaitersForStateChangeNoLock(new_consumer_state); |
325 WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock(); | 325 WaitFlagsState new_producer_state = ProducerGetWaitFlagsStateNoLock(); |
326 if (!new_producer_state.equals(old_producer_state)) | 326 if (!new_producer_state.equals(old_producer_state)) |
327 AwakeProducerWaitersForStateChangeNoLock(new_producer_state); | 327 AwakeProducerWaitersForStateChangeNoLock(new_producer_state); |
328 return rv; | 328 return rv; |
329 } | 329 } |
330 | 330 |
331 MojoResult DataPipe::ConsumerAddWaiter(Waiter* waiter, | 331 MojoResult DataPipe::ConsumerAddWaiter(Waiter* waiter, |
332 MojoWaitFlags flags, | 332 MojoHandleSignals signals, |
333 uint32_t context) { | 333 uint32_t context) { |
334 base::AutoLock locker(lock_); | 334 base::AutoLock locker(lock_); |
335 DCHECK(has_local_consumer_no_lock()); | 335 DCHECK(has_local_consumer_no_lock()); |
336 | 336 |
337 WaitFlagsState consumer_state = ConsumerGetWaitFlagsStateNoLock(); | 337 WaitFlagsState consumer_state = ConsumerGetWaitFlagsStateNoLock(); |
338 if (consumer_state.satisfies(flags)) | 338 if (consumer_state.satisfies(signals)) |
339 return MOJO_RESULT_ALREADY_EXISTS; | 339 return MOJO_RESULT_ALREADY_EXISTS; |
340 if (!consumer_state.can_satisfy(flags)) | 340 if (!consumer_state.can_satisfy(signals)) |
341 return MOJO_RESULT_FAILED_PRECONDITION; | 341 return MOJO_RESULT_FAILED_PRECONDITION; |
342 | 342 |
343 consumer_waiter_list_->AddWaiter(waiter, flags, context); | 343 consumer_waiter_list_->AddWaiter(waiter, signals, context); |
344 return MOJO_RESULT_OK; | 344 return MOJO_RESULT_OK; |
345 } | 345 } |
346 | 346 |
347 void DataPipe::ConsumerRemoveWaiter(Waiter* waiter) { | 347 void DataPipe::ConsumerRemoveWaiter(Waiter* waiter) { |
348 base::AutoLock locker(lock_); | 348 base::AutoLock locker(lock_); |
349 DCHECK(has_local_consumer_no_lock()); | 349 DCHECK(has_local_consumer_no_lock()); |
350 consumer_waiter_list_->RemoveWaiter(waiter); | 350 consumer_waiter_list_->RemoveWaiter(waiter); |
351 } | 351 } |
352 | 352 |
353 bool DataPipe::ConsumerIsBusy() const { | 353 bool DataPipe::ConsumerIsBusy() const { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 void DataPipe::AwakeConsumerWaitersForStateChangeNoLock( | 392 void DataPipe::AwakeConsumerWaitersForStateChangeNoLock( |
393 const WaitFlagsState& new_consumer_state) { | 393 const WaitFlagsState& new_consumer_state) { |
394 lock_.AssertAcquired(); | 394 lock_.AssertAcquired(); |
395 if (!has_local_consumer_no_lock()) | 395 if (!has_local_consumer_no_lock()) |
396 return; | 396 return; |
397 consumer_waiter_list_->AwakeWaitersForStateChange(new_consumer_state); | 397 consumer_waiter_list_->AwakeWaitersForStateChange(new_consumer_state); |
398 } | 398 } |
399 | 399 |
400 } // namespace system | 400 } // namespace system |
401 } // namespace mojo | 401 } // namespace mojo |
OLD | NEW |