| Index: mojo/system/data_pipe.cc
|
| diff --git a/mojo/system/data_pipe.cc b/mojo/system/data_pipe.cc
|
| index 02b49be8343184663858b5c3029af5f6a5ae00cd..687b96837f108495ab1bc5e29961022128e7a460 100644
|
| --- a/mojo/system/data_pipe.cc
|
| +++ b/mojo/system/data_pipe.cc
|
| @@ -286,20 +286,25 @@ MojoResult DataPipe::ConsumerQueryData(uint32_t* num_bytes) {
|
| return ConsumerQueryDataImplNoLock(num_bytes);
|
| }
|
|
|
| -MojoResult DataPipe::ConsumerBeginReadData(const void** buffer,
|
| - uint32_t* buffer_num_bytes,
|
| - bool all_or_none) {
|
| +MojoResult DataPipe::ConsumerBeginReadData(
|
| + UserPointer<const void*> buffer,
|
| + UserPointer<uint32_t> buffer_num_bytes,
|
| + bool all_or_none) {
|
| base::AutoLock locker(lock_);
|
| DCHECK(has_local_consumer_no_lock());
|
|
|
| if (consumer_in_two_phase_read_no_lock())
|
| return MOJO_RESULT_BUSY;
|
|
|
| - if (all_or_none && *buffer_num_bytes % element_num_bytes_ != 0)
|
| - return MOJO_RESULT_INVALID_ARGUMENT;
|
| + uint32_t min_num_bytes_to_read = 0;
|
| + if (all_or_none) {
|
| + min_num_bytes_to_read = buffer_num_bytes.Get();
|
| + if (min_num_bytes_to_read % element_num_bytes_ != 0)
|
| + return MOJO_RESULT_INVALID_ARGUMENT;
|
| + }
|
|
|
| MojoResult rv = ConsumerBeginReadDataImplNoLock(buffer, buffer_num_bytes,
|
| - all_or_none);
|
| + min_num_bytes_to_read);
|
| if (rv != MOJO_RESULT_OK)
|
| return rv;
|
| DCHECK(consumer_in_two_phase_read_no_lock());
|
|
|