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

Side by Side Diff: mojo/edk/system/data_pipe.cc

Issue 703273002: Update mojo sdk to rev 04a510fb37db10642e156957f9b2c11c2f6442ac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix content/child -> mojo/common linking Created 6 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « mojo/edk/system/data_pipe.h ('k') | mojo/edk/system/data_pipe_consumer_dispatcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/edk/system/data_pipe.h" 5 #include "mojo/edk/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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 DVLOG_IF(2, consumer_in_two_phase_read_no_lock()) 253 DVLOG_IF(2, consumer_in_two_phase_read_no_lock())
254 << "Consumer closed with active two-phase read"; 254 << "Consumer closed with active two-phase read";
255 consumer_two_phase_max_num_bytes_read_ = 0; 255 consumer_two_phase_max_num_bytes_read_ = 0;
256 ConsumerCloseImplNoLock(); 256 ConsumerCloseImplNoLock();
257 AwakeProducerWaitersForStateChangeNoLock( 257 AwakeProducerWaitersForStateChangeNoLock(
258 ProducerGetHandleSignalsStateImplNoLock()); 258 ProducerGetHandleSignalsStateImplNoLock());
259 } 259 }
260 260
261 MojoResult DataPipe::ConsumerReadData(UserPointer<void> elements, 261 MojoResult DataPipe::ConsumerReadData(UserPointer<void> elements,
262 UserPointer<uint32_t> num_bytes, 262 UserPointer<uint32_t> num_bytes,
263 bool all_or_none) { 263 bool all_or_none,
264 bool peek) {
264 base::AutoLock locker(lock_); 265 base::AutoLock locker(lock_);
265 DCHECK(has_local_consumer_no_lock()); 266 DCHECK(has_local_consumer_no_lock());
266 267
267 if (consumer_in_two_phase_read_no_lock()) 268 if (consumer_in_two_phase_read_no_lock())
268 return MOJO_RESULT_BUSY; 269 return MOJO_RESULT_BUSY;
269 270
270 uint32_t max_num_bytes_to_read = num_bytes.Get(); 271 uint32_t max_num_bytes_to_read = num_bytes.Get();
271 if (max_num_bytes_to_read % element_num_bytes_ != 0) 272 if (max_num_bytes_to_read % element_num_bytes_ != 0)
272 return MOJO_RESULT_INVALID_ARGUMENT; 273 return MOJO_RESULT_INVALID_ARGUMENT;
273 274
274 if (max_num_bytes_to_read == 0) 275 if (max_num_bytes_to_read == 0)
275 return MOJO_RESULT_OK; // Nothing to do. 276 return MOJO_RESULT_OK; // Nothing to do.
276 277
277 uint32_t min_num_bytes_to_read = all_or_none ? max_num_bytes_to_read : 0; 278 uint32_t min_num_bytes_to_read = all_or_none ? max_num_bytes_to_read : 0;
278 279
279 HandleSignalsState old_producer_state = 280 HandleSignalsState old_producer_state =
280 ProducerGetHandleSignalsStateImplNoLock(); 281 ProducerGetHandleSignalsStateImplNoLock();
281 MojoResult rv = ConsumerReadDataImplNoLock( 282 MojoResult rv = ConsumerReadDataImplNoLock(
282 elements, num_bytes, max_num_bytes_to_read, min_num_bytes_to_read); 283 elements, num_bytes, max_num_bytes_to_read, min_num_bytes_to_read, peek);
283 HandleSignalsState new_producer_state = 284 HandleSignalsState new_producer_state =
284 ProducerGetHandleSignalsStateImplNoLock(); 285 ProducerGetHandleSignalsStateImplNoLock();
285 if (!new_producer_state.equals(old_producer_state)) 286 if (!new_producer_state.equals(old_producer_state))
286 AwakeProducerWaitersForStateChangeNoLock(new_producer_state); 287 AwakeProducerWaitersForStateChangeNoLock(new_producer_state);
287 return rv; 288 return rv;
288 } 289 }
289 290
290 MojoResult DataPipe::ConsumerDiscardData(UserPointer<uint32_t> num_bytes, 291 MojoResult DataPipe::ConsumerDiscardData(UserPointer<uint32_t> num_bytes,
291 bool all_or_none) { 292 bool all_or_none) {
292 base::AutoLock locker(lock_); 293 base::AutoLock locker(lock_);
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 void DataPipe::AwakeConsumerWaitersForStateChangeNoLock( 465 void DataPipe::AwakeConsumerWaitersForStateChangeNoLock(
465 const HandleSignalsState& new_consumer_state) { 466 const HandleSignalsState& new_consumer_state) {
466 lock_.AssertAcquired(); 467 lock_.AssertAcquired();
467 if (!has_local_consumer_no_lock()) 468 if (!has_local_consumer_no_lock())
468 return; 469 return;
469 consumer_waiter_list_->AwakeWaitersForStateChange(new_consumer_state); 470 consumer_waiter_list_->AwakeWaitersForStateChange(new_consumer_state);
470 } 471 }
471 472
472 } // namespace system 473 } // namespace system
473 } // namespace mojo 474 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/data_pipe.h ('k') | mojo/edk/system/data_pipe_consumer_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698