| Index: mojo/system/data_pipe.cc
|
| diff --git a/mojo/system/data_pipe.cc b/mojo/system/data_pipe.cc
|
| index 305b882e4feab03ababe210625a6a0c3d1a99f3a..b5a0f1bad18ccba7cf38d7f6bb3e687e5857633b 100644
|
| --- a/mojo/system/data_pipe.cc
|
| +++ b/mojo/system/data_pipe.cc
|
| @@ -76,7 +76,7 @@ void DataPipe::ProducerClose() {
|
|
|
| MojoResult DataPipe::ProducerWriteData(const void* elements,
|
| uint32_t* num_bytes,
|
| - MojoWriteDataFlags flags) {
|
| + bool all_or_none) {
|
| base::AutoLock locker(lock_);
|
| DCHECK(has_local_producer_no_lock());
|
|
|
| @@ -90,21 +90,20 @@ MojoResult DataPipe::ProducerWriteData(const void* elements,
|
| if (*num_bytes == 0)
|
| return MOJO_RESULT_OK; // Nothing to do.
|
|
|
| - return ProducerWriteDataImplNoLock(elements, num_bytes, flags);
|
| + return ProducerWriteDataImplNoLock(elements, num_bytes, all_or_none);
|
| }
|
|
|
| MojoResult DataPipe::ProducerBeginWriteData(void** buffer,
|
| uint32_t* buffer_num_bytes,
|
| - MojoWriteDataFlags flags) {
|
| + bool all_or_none) {
|
| base::AutoLock locker(lock_);
|
| DCHECK(has_local_producer_no_lock());
|
|
|
| if (producer_in_two_phase_write_)
|
| return MOJO_RESULT_BUSY;
|
|
|
| - MojoResult rv = ProducerBeginWriteDataImplNoLock(buffer,
|
| - buffer_num_bytes,
|
| - flags);
|
| + MojoResult rv = ProducerBeginWriteDataImplNoLock(buffer, buffer_num_bytes,
|
| + all_or_none);
|
| if (rv != MOJO_RESULT_OK)
|
| return rv;
|
|
|
| @@ -163,43 +162,61 @@ void DataPipe::ConsumerClose() {
|
|
|
| MojoResult DataPipe::ConsumerReadData(void* elements,
|
| uint32_t* num_bytes,
|
| - MojoReadDataFlags flags) {
|
| + bool all_or_none) {
|
| base::AutoLock locker(lock_);
|
| DCHECK(has_local_consumer_no_lock());
|
|
|
| if (consumer_in_two_phase_read_)
|
| return MOJO_RESULT_BUSY;
|
|
|
| - // Note: Don't need to validate |*num_bytes| for query.
|
| - if ((flags & MOJO_READ_DATA_FLAG_QUERY))
|
| - return ConsumerQueryDataNoLock(num_bytes);
|
| + if (*num_bytes % element_num_bytes_ != 0)
|
| + return MOJO_RESULT_INVALID_ARGUMENT;
|
| +
|
| + if (*num_bytes == 0)
|
| + return MOJO_RESULT_OK; // Nothing to do.
|
| +
|
| + return ConsumerReadDataImplNoLock(elements, num_bytes, all_or_none);
|
| +}
|
| +
|
| +MojoResult DataPipe::ConsumerDiscardData(uint32_t* num_bytes,
|
| + bool all_or_none) {
|
| + base::AutoLock locker(lock_);
|
| + DCHECK(has_local_consumer_no_lock());
|
| +
|
| + if (consumer_in_two_phase_read_)
|
| + return MOJO_RESULT_BUSY;
|
|
|
| if (*num_bytes % element_num_bytes_ != 0)
|
| return MOJO_RESULT_INVALID_ARGUMENT;
|
|
|
| if (*num_bytes == 0)
|
| - return MOJO_RESULT_OK; // Nothing to do (for read or for discard).
|
| + return MOJO_RESULT_OK; // Nothing to do.
|
|
|
| - if ((flags & MOJO_READ_DATA_FLAG_DISCARD)) {
|
| - return ConsumerDiscardDataNoLock(num_bytes,
|
| - (flags & MOJO_READ_DATA_FLAG_ALL_OR_NONE));
|
| - }
|
| + return ConsumerDiscardDataImplNoLock(num_bytes, all_or_none);
|
| +}
|
| +
|
| +MojoResult DataPipe::ConsumerQueryData(uint32_t* num_bytes) {
|
| + base::AutoLock locker(lock_);
|
| + DCHECK(has_local_consumer_no_lock());
|
| +
|
| + if (consumer_in_two_phase_read_)
|
| + return MOJO_RESULT_BUSY;
|
|
|
| - return ConsumerReadDataImplNoLock(elements, num_bytes, flags);
|
| + // Note: Don't need to validate |*num_bytes| for query.
|
| + return ConsumerQueryDataImplNoLock(num_bytes);
|
| }
|
|
|
| MojoResult DataPipe::ConsumerBeginReadData(const void** buffer,
|
| uint32_t* buffer_num_bytes,
|
| - MojoReadDataFlags flags) {
|
| + bool all_or_none) {
|
| base::AutoLock locker(lock_);
|
| DCHECK(has_local_consumer_no_lock());
|
|
|
| if (consumer_in_two_phase_read_)
|
| return MOJO_RESULT_BUSY;
|
|
|
| - MojoResult rv = ConsumerBeginReadDataImplNoLock(buffer,
|
| - buffer_num_bytes,
|
| - flags);
|
| + MojoResult rv = ConsumerBeginReadDataImplNoLock(buffer, buffer_num_bytes,
|
| + all_or_none);
|
| if (rv != MOJO_RESULT_OK)
|
| return rv;
|
|
|
|
|