Cleanup: Remove internal two-phase data pipe all-or-none support.
BUG=Fixes #366
R=jamesr@chromium.org
Review URL: https://codereview.chromium.org/1365383004 .
diff --git a/mojo/edk/system/data_pipe.cc b/mojo/edk/system/data_pipe.cc
index a18c72d..bc2daea 100644
--- a/mojo/edk/system/data_pipe.cc
+++ b/mojo/edk/system/data_pipe.cc
@@ -309,8 +309,7 @@
MojoResult DataPipe::ProducerBeginWriteData(
UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- bool all_or_none) {
+ UserPointer<uint32_t> buffer_num_bytes) {
MutexLocker locker(&mutex_);
DCHECK(has_local_producer_no_lock());
@@ -319,15 +318,7 @@
if (!consumer_open_no_lock())
return MOJO_RESULT_FAILED_PRECONDITION;
- uint32_t min_num_bytes_to_write = 0;
- if (all_or_none) {
- min_num_bytes_to_write = buffer_num_bytes.Get();
- if (min_num_bytes_to_write % element_num_bytes() != 0)
- return MOJO_RESULT_INVALID_ARGUMENT;
- }
-
- MojoResult rv = impl_->ProducerBeginWriteData(buffer, buffer_num_bytes,
- min_num_bytes_to_write);
+ MojoResult rv = impl_->ProducerBeginWriteData(buffer, buffer_num_bytes);
if (rv != MOJO_RESULT_OK)
return rv;
// Note: No need to awake producer awakables, even though we're going from
@@ -533,23 +524,14 @@
MojoResult DataPipe::ConsumerBeginReadData(
UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- bool all_or_none) {
+ UserPointer<uint32_t> buffer_num_bytes) {
MutexLocker locker(&mutex_);
DCHECK(has_local_consumer_no_lock());
if (consumer_in_two_phase_read_no_lock())
return MOJO_RESULT_BUSY;
- 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 = impl_->ConsumerBeginReadData(buffer, buffer_num_bytes,
- min_num_bytes_to_read);
+ MojoResult rv = impl_->ConsumerBeginReadData(buffer, buffer_num_bytes);
if (rv != MOJO_RESULT_OK)
return rv;
DCHECK(consumer_in_two_phase_read_no_lock());
diff --git a/mojo/edk/system/data_pipe.h b/mojo/edk/system/data_pipe.h
index c5a1c64..180c981 100644
--- a/mojo/edk/system/data_pipe.h
+++ b/mojo/edk/system/data_pipe.h
@@ -107,8 +107,7 @@
UserPointer<uint32_t> num_bytes,
bool all_or_none);
MojoResult ProducerBeginWriteData(UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- bool all_or_none);
+ UserPointer<uint32_t> buffer_num_bytes);
MojoResult ProducerEndWriteData(uint32_t num_bytes_written);
HandleSignalsState ProducerGetHandleSignalsState();
MojoResult ProducerAddAwakable(Awakable* awakable,
@@ -140,8 +139,7 @@
bool all_or_none);
MojoResult ConsumerQueryData(UserPointer<uint32_t> num_bytes);
MojoResult ConsumerBeginReadData(UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- bool all_or_none);
+ UserPointer<uint32_t> buffer_num_bytes);
MojoResult ConsumerEndReadData(uint32_t num_bytes_read);
HandleSignalsState ConsumerGetHandleSignalsState();
MojoResult ConsumerAddAwakable(Awakable* awakable,
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.cc b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
index 0821c64..059f801 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
@@ -112,8 +112,7 @@
(flags & MOJO_READ_DATA_FLAG_QUERY) || (flags & MOJO_READ_DATA_FLAG_PEEK))
return MOJO_RESULT_INVALID_ARGUMENT;
- // TODO(vtl): Remove all-or-none support at lower levels.
- return data_pipe_->ConsumerBeginReadData(buffer, buffer_num_bytes, false);
+ return data_pipe_->ConsumerBeginReadData(buffer, buffer_num_bytes);
}
MojoResult DataPipeConsumerDispatcher::EndReadDataImplNoLock(
diff --git a/mojo/edk/system/data_pipe_impl.h b/mojo/edk/system/data_pipe_impl.h
index eff6735..6dfddc7 100644
--- a/mojo/edk/system/data_pipe_impl.h
+++ b/mojo/edk/system/data_pipe_impl.h
@@ -64,8 +64,7 @@
uint32_t min_num_bytes_to_write) = 0;
virtual MojoResult ProducerBeginWriteData(
UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_write) = 0;
+ UserPointer<uint32_t> buffer_num_bytes) = 0;
virtual MojoResult ProducerEndWriteData(uint32_t num_bytes_written) = 0;
// Note: A producer should not be writable during a two-phase write.
virtual HandleSignalsState ProducerGetHandleSignalsState() const = 0;
@@ -92,8 +91,7 @@
virtual MojoResult ConsumerQueryData(UserPointer<uint32_t> num_bytes) = 0;
virtual MojoResult ConsumerBeginReadData(
UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_read) = 0;
+ UserPointer<uint32_t> buffer_num_bytes) = 0;
virtual MojoResult ConsumerEndReadData(uint32_t num_bytes_read) = 0;
// Note: A consumer should not be writable during a two-phase read.
virtual HandleSignalsState ConsumerGetHandleSignalsState() const = 0;
diff --git a/mojo/edk/system/data_pipe_impl_unittest.cc b/mojo/edk/system/data_pipe_impl_unittest.cc
index b7309c4..09eac99 100644
--- a/mojo/edk/system/data_pipe_impl_unittest.cc
+++ b/mojo/edk/system/data_pipe_impl_unittest.cc
@@ -124,9 +124,8 @@
return dpp()->ProducerWriteData(elements, num_bytes, all_or_none);
}
MojoResult ProducerBeginWriteData(UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- bool all_or_none) {
- return dpp()->ProducerBeginWriteData(buffer, buffer_num_bytes, all_or_none);
+ UserPointer<uint32_t> buffer_num_bytes) {
+ return dpp()->ProducerBeginWriteData(buffer, buffer_num_bytes);
}
MojoResult ProducerEndWriteData(uint32_t num_bytes_written) {
return dpp()->ProducerEndWriteData(num_bytes_written);
@@ -158,9 +157,8 @@
return dpc()->ConsumerQueryData(num_bytes);
}
MojoResult ConsumerBeginReadData(UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- bool all_or_none) {
- return dpc()->ConsumerBeginReadData(buffer, buffer_num_bytes, all_or_none);
+ UserPointer<uint32_t> buffer_num_bytes) {
+ return dpc()->ConsumerBeginReadData(buffer, buffer_num_bytes);
}
MojoResult ConsumerEndReadData(uint32_t num_bytes_read) {
return dpc()->ConsumerEndReadData(num_bytes_read);
@@ -611,7 +609,7 @@
uint32_t context;
int32_t elements[10] = {};
- uint32_t num_bytes = 0;
+ uint32_t num_bytes = 0u;
// Try reading; nothing there yet.
num_bytes =
@@ -621,7 +619,7 @@
MakeUserPointer(&num_bytes), false, false));
// Query; nothing there yet.
- num_bytes = 0;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerQueryData(MakeUserPointer(&num_bytes)));
EXPECT_EQ(0u, num_bytes);
@@ -668,7 +666,7 @@
// implementation/configured limits) that not all the data has arrived yet.
// (The theoretically-correct assertion here is that |num_bytes| is |1 * ...|
// or |2 * ...|.)
- num_bytes = 0;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerQueryData(MakeUserPointer(&num_bytes)));
EXPECT_EQ(2 * sizeof(elements[0]), num_bytes);
@@ -687,7 +685,7 @@
// Query.
// TODO(vtl): See previous TODO. (If we got 2 elements there, however, we
// should get 1 here.)
- num_bytes = 0;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerQueryData(MakeUserPointer(&num_bytes)));
EXPECT_EQ(1 * sizeof(elements[0]), num_bytes);
@@ -704,7 +702,7 @@
EXPECT_EQ(-1, elements[1]);
// Query. Still has 1 element remaining.
- num_bytes = 0;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerQueryData(MakeUserPointer(&num_bytes)));
EXPECT_EQ(1 * sizeof(elements[0]), num_bytes);
@@ -731,7 +729,7 @@
EXPECT_EQ(-1, elements[1]);
// Query.
- num_bytes = 0;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerQueryData(MakeUserPointer(&num_bytes)));
EXPECT_EQ(0u, num_bytes);
@@ -872,7 +870,7 @@
num_bytes = static_cast<uint32_t>(3u * sizeof(elements[0]));
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&buffer),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(buffer);
EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
@@ -891,7 +889,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_buffer);
// Since we only read one element (after having written three in all), the
// two-phase read should only allow us to read one. This checks an
@@ -1212,11 +1210,10 @@
// Write two elements.
int32_t* elements = nullptr;
void* buffer = nullptr;
- // Request room for three (but we'll only write two).
- uint32_t num_bytes = static_cast<uint32_t>(3u * sizeof(elements[0]));
+ uint32_t num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&buffer),
- MakeUserPointer(&num_bytes), true));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(buffer);
EXPECT_GE(num_bytes, static_cast<uint32_t>(3u * sizeof(elements[0])));
elements = static_cast<int32_t*>(buffer);
@@ -1236,12 +1233,11 @@
hss.satisfiable_signals);
// Read one element.
- // Request two in all-or-none mode, but only read one.
const void* read_buffer = nullptr;
- num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0]));
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer),
- MakeUserPointer(&num_bytes), true));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_buffer);
EXPECT_EQ(static_cast<uint32_t>(2u * sizeof(elements[0])), num_bytes);
const int32_t* read_elements = static_cast<const int32_t*>(read_buffer);
@@ -1265,7 +1261,7 @@
num_bytes = static_cast<uint32_t>(3u * sizeof(elements[0]));
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_buffer);
EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
read_elements = static_cast<const int32_t*>(read_buffer);
@@ -1320,11 +1316,11 @@
EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
hss.satisfiable_signals);
- uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t));
void* write_ptr = nullptr;
+ uint32_t num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(write_ptr);
EXPECT_GE(num_bytes, static_cast<uint32_t>(1u * sizeof(int32_t)));
@@ -1370,11 +1366,11 @@
// Start another two-phase write and check that it's readable even in the
// middle of it.
- num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t));
write_ptr = nullptr;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(write_ptr);
EXPECT_GE(num_bytes, static_cast<uint32_t>(1u * sizeof(int32_t)));
@@ -1392,11 +1388,11 @@
EXPECT_EQ(MOJO_RESULT_OK, this->ProducerEndWriteData(0u));
// Start a two-phase read.
- num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t));
const void* read_ptr = nullptr;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_ptr);
EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(int32_t)), num_bytes);
@@ -1649,180 +1645,6 @@
this->ConsumerClose();
}
-TYPED_TEST(DataPipeImplTest, TwoPhaseAllOrNone) {
- const MojoCreateDataPipeOptions options = {
- kSizeOfOptions, // |struct_size|.
- MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|.
- static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|.
- 10 * sizeof(int32_t) // |capacity_num_bytes|.
- };
- this->Create(options);
- this->DoTransfer();
-
- Waiter waiter;
- HandleSignalsState hss;
-
- // Try writing way too much (two-phase).
- uint32_t num_bytes = 20u * sizeof(int32_t);
- void* write_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
- this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), true));
-
- // Try writing an amount which isn't a multiple of the element size
- // (two-phase).
- static_assert(sizeof(int32_t) > 1u, "Wow! int32_t's have size 1");
- num_bytes = 1u;
- write_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
- this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), true));
-
- // Try reading way too much (two-phase).
- num_bytes = 20u * sizeof(int32_t);
- const void* read_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
- this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), true));
-
- // Add waiter.
- waiter.Init();
- ASSERT_EQ(MOJO_RESULT_OK,
- this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 1,
- nullptr));
-
- // Write half (two-phase).
- num_bytes = 5u * sizeof(int32_t);
- write_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_OK,
- this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), true));
- // May provide more space than requested.
- EXPECT_GE(num_bytes, 5u * sizeof(int32_t));
- EXPECT_TRUE(write_ptr);
- Seq(0, 5, static_cast<int32_t*>(write_ptr));
- EXPECT_EQ(MOJO_RESULT_OK, this->ProducerEndWriteData(5u * sizeof(int32_t)));
-
- // Wait for data.
- // TODO(vtl): (See corresponding TODO in AllOrNone.)
- EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::TinyDeadline(), nullptr));
- hss = HandleSignalsState();
- this->ConsumerRemoveAwakable(&waiter, &hss);
- EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
- EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
- hss.satisfiable_signals);
-
- // Try reading an amount which isn't a multiple of the element size
- // (two-phase).
- num_bytes = 1u;
- read_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
- this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), true));
-
- // Read one (two-phase).
- num_bytes = 1u * sizeof(int32_t);
- read_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_OK,
- this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), true));
- EXPECT_GE(num_bytes, 1u * sizeof(int32_t));
- EXPECT_EQ(0, static_cast<const int32_t*>(read_ptr)[0]);
- EXPECT_EQ(MOJO_RESULT_OK, this->ConsumerEndReadData(1u * sizeof(int32_t)));
-
- // We should have four left, leaving room for six.
- num_bytes = 0u;
- EXPECT_EQ(MOJO_RESULT_OK,
- this->ConsumerQueryData(MakeUserPointer(&num_bytes)));
- EXPECT_EQ(4u * sizeof(int32_t), num_bytes);
-
- // Assuming a tight circular buffer of the specified capacity, we can't do a
- // two-phase write of six now.
- num_bytes = 6u * sizeof(int32_t);
- write_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE,
- this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), true));
-
- // TODO(vtl): Hack (see also the TODO above): We can't currently wait for a
- // specified amount of space to be available, so poll.
- for (size_t i = 0; i < kMaxPoll; i++) {
- // Write six elements (simple), filling the buffer.
- num_bytes = 6u * sizeof(int32_t);
- int32_t buffer[100];
- Seq(100, 6, buffer);
- MojoResult result = this->ProducerWriteData(
- UserPointer<const void>(buffer), MakeUserPointer(&num_bytes), true);
- if (result == MOJO_RESULT_OK)
- break;
- EXPECT_EQ(MOJO_RESULT_OUT_OF_RANGE, result);
-
- test::Sleep(test::EpsilonDeadline());
- }
- EXPECT_EQ(6u * sizeof(int32_t), num_bytes);
-
- // TODO(vtl): Hack: poll again.
- for (size_t i = 0; i < kMaxPoll; i++) {
- // We have ten.
- num_bytes = 0u;
- EXPECT_EQ(MOJO_RESULT_OK,
- this->ConsumerQueryData(MakeUserPointer(&num_bytes)));
- if (num_bytes >= 10u * sizeof(int32_t))
- break;
-
- test::Sleep(test::EpsilonDeadline());
- }
- EXPECT_EQ(10u * sizeof(int32_t), num_bytes);
-
- // Note: Whether a two-phase read of ten would fail here or not is
- // implementation-dependent.
-
- // Add waiter.
- waiter.Init();
- ASSERT_EQ(MOJO_RESULT_OK,
- this->ConsumerAddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED,
- 2, nullptr));
-
- // Close the producer.
- this->ProducerClose();
-
- // A two-phase read of nine should work.
- num_bytes = 9u * sizeof(int32_t);
- read_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_OK,
- this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), true));
- EXPECT_GE(num_bytes, 9u * sizeof(int32_t));
- EXPECT_EQ(1, static_cast<const int32_t*>(read_ptr)[0]);
- EXPECT_EQ(2, static_cast<const int32_t*>(read_ptr)[1]);
- EXPECT_EQ(3, static_cast<const int32_t*>(read_ptr)[2]);
- EXPECT_EQ(4, static_cast<const int32_t*>(read_ptr)[3]);
- EXPECT_EQ(100, static_cast<const int32_t*>(read_ptr)[4]);
- EXPECT_EQ(101, static_cast<const int32_t*>(read_ptr)[5]);
- EXPECT_EQ(102, static_cast<const int32_t*>(read_ptr)[6]);
- EXPECT_EQ(103, static_cast<const int32_t*>(read_ptr)[7]);
- EXPECT_EQ(104, static_cast<const int32_t*>(read_ptr)[8]);
- EXPECT_EQ(MOJO_RESULT_OK, this->ConsumerEndReadData(9u * sizeof(int32_t)));
-
- // Wait for peer closed.
- EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::TinyDeadline(), nullptr));
- hss = HandleSignalsState();
- this->ConsumerRemoveAwakable(&waiter, &hss);
- EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
- hss.satisfied_signals);
- EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
- hss.satisfiable_signals);
-
- // A two-phase read of two should fail, with "failed precondition".
- num_bytes = 2u * sizeof(int32_t);
- read_ptr = nullptr;
- EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
- this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), true));
-
- this->ConsumerClose();
-}
-
// Tests that |ProducerWriteData()| and |ConsumerReadData()| writes and reads,
// respectively, as much as possible, even if it may have to "wrap around" the
// internal circular buffer. (Note that the two-phase write and read need not do
@@ -1888,14 +1710,14 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(write_buffer_ptr);
EXPECT_EQ(80u, num_bytes);
EXPECT_EQ(MOJO_RESULT_OK, this->ProducerEndWriteData(0u));
}
// TODO(vtl): (See corresponding TODO in TwoPhaseAllOrNone.)
- size_t total_num_bytes = 0;
+ size_t total_num_bytes = 0u;
for (size_t i = 0; i < kMaxPoll; i++) {
// Write as much data as we can (using |ProducerWriteData()|). We should
// write 90 bytes (eventually).
@@ -1935,7 +1757,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_buffer_ptr);
EXPECT_EQ(90u, num_bytes);
EXPECT_EQ(MOJO_RESULT_OK, this->ConsumerEndReadData(0u));
@@ -1990,7 +1812,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(write_buffer_ptr);
EXPECT_GT(num_bytes, 0u);
@@ -2011,7 +1833,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_buffer_ptr);
EXPECT_EQ(2u * kTestDataSize, num_bytes);
@@ -2027,7 +1849,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_buffer_ptr);
EXPECT_EQ(kTestDataSize, num_bytes);
@@ -2071,7 +1893,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(write_buffer_ptr);
ASSERT_GT(num_bytes, kTestDataSize);
@@ -2089,7 +1911,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(read_buffer_ptr);
EXPECT_EQ(kTestDataSize, num_bytes);
@@ -2127,7 +1949,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
this->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
this->ProducerClose();
}
@@ -2151,7 +1973,7 @@
uint32_t num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_TRUE(write_buffer_ptr);
ASSERT_GT(num_bytes, kTestDataSize);
@@ -2232,7 +2054,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
// Ditto for discard.
num_bytes = 10u;
@@ -2278,11 +2100,11 @@
EXPECT_EQ(0u, num_bytes);
// Try ending a two-phase write with an invalid amount (too much).
- num_bytes = 0u;
void* write_ptr = nullptr;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
this->ProducerEndWriteData(num_bytes +
static_cast<uint32_t>(sizeof(int32_t))));
@@ -2301,11 +2123,11 @@
// Try ending a two-phase write with an invalid amount (not a multiple of the
// element size).
- num_bytes = 0u;
write_ptr = nullptr;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_GE(num_bytes, 1u);
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, this->ProducerEndWriteData(1u));
@@ -2364,7 +2186,7 @@
const void* read_ptr = nullptr;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
this->ConsumerEndReadData(num_bytes +
static_cast<uint32_t>(sizeof(int32_t))));
@@ -2381,7 +2203,7 @@
read_ptr = nullptr;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_EQ(1u * sizeof(int32_t), num_bytes);
EXPECT_EQ(123, static_cast<const int32_t*>(read_ptr)[0]);
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, this->ConsumerEndReadData(1u));
@@ -2437,7 +2259,7 @@
num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
this->ConsumerBeginReadData(MakeUserPointer(&read_buffer_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
EXPECT_EQ(kTestDataSize, num_bytes);
EXPECT_EQ(0, memcmp(read_buffer_ptr, kTestData, kTestDataSize));
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.cc b/mojo/edk/system/data_pipe_producer_dispatcher.cc
index 536dace..5221713 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.cc
@@ -88,8 +88,7 @@
if ((flags & MOJO_WRITE_DATA_FLAG_ALL_OR_NONE))
return MOJO_RESULT_INVALID_ARGUMENT;
- // TODO(vtl): Remove all-or-none support at lower levels.
- return data_pipe_->ProducerBeginWriteData(buffer, buffer_num_bytes, false);
+ return data_pipe_->ProducerBeginWriteData(buffer, buffer_num_bytes);
}
MojoResult DataPipeProducerDispatcher::EndWriteDataImplNoLock(
diff --git a/mojo/edk/system/local_data_pipe_impl.cc b/mojo/edk/system/local_data_pipe_impl.cc
index 3d2e9e5..8f878d5 100644
--- a/mojo/edk/system/local_data_pipe_impl.cc
+++ b/mojo/edk/system/local_data_pipe_impl.cc
@@ -107,8 +107,7 @@
MojoResult LocalDataPipeImpl::ProducerBeginWriteData(
UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_write) {
+ UserPointer<uint32_t> buffer_num_bytes) {
DCHECK(consumer_open());
// The index we need to start writing at.
@@ -116,12 +115,6 @@
(start_index_ + current_num_bytes_) % capacity_num_bytes();
size_t max_num_bytes_to_write = GetMaxNumBytesToWrite();
- if (min_num_bytes_to_write > max_num_bytes_to_write) {
- // Don't return "should wait" since you can't wait for a specified amount
- // of data.
- return MOJO_RESULT_OUT_OF_RANGE;
- }
-
// Don't go into a two-phase write if there's no room.
if (max_num_bytes_to_write == 0)
return MOJO_RESULT_SHOULD_WAIT;
@@ -289,16 +282,8 @@
MojoResult LocalDataPipeImpl::ConsumerBeginReadData(
UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_read) {
+ UserPointer<uint32_t> buffer_num_bytes) {
size_t max_num_bytes_to_read = GetMaxNumBytesToRead();
- if (min_num_bytes_to_read > max_num_bytes_to_read) {
- // Don't return "should wait" since you can't wait for a specified amount of
- // data.
- return producer_open() ? MOJO_RESULT_OUT_OF_RANGE
- : MOJO_RESULT_FAILED_PRECONDITION;
- }
-
// Don't go into a two-phase read if there's no data.
if (max_num_bytes_to_read == 0) {
return producer_open() ? MOJO_RESULT_SHOULD_WAIT
diff --git a/mojo/edk/system/local_data_pipe_impl.h b/mojo/edk/system/local_data_pipe_impl.h
index 46a353d..aa14590 100644
--- a/mojo/edk/system/local_data_pipe_impl.h
+++ b/mojo/edk/system/local_data_pipe_impl.h
@@ -31,9 +31,9 @@
UserPointer<uint32_t> num_bytes,
uint32_t max_num_bytes_to_write,
uint32_t min_num_bytes_to_write) override;
- MojoResult ProducerBeginWriteData(UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_write) override;
+ MojoResult ProducerBeginWriteData(
+ UserPointer<void*> buffer,
+ UserPointer<uint32_t> buffer_num_bytes) override;
MojoResult ProducerEndWriteData(uint32_t num_bytes_written) override;
HandleSignalsState ProducerGetHandleSignalsState() const override;
void ProducerStartSerialize(Channel* channel,
@@ -54,9 +54,9 @@
uint32_t max_num_bytes_to_discard,
uint32_t min_num_bytes_to_discard) override;
MojoResult ConsumerQueryData(UserPointer<uint32_t> num_bytes) override;
- MojoResult ConsumerBeginReadData(UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_read) override;
+ MojoResult ConsumerBeginReadData(
+ UserPointer<const void*> buffer,
+ UserPointer<uint32_t> buffer_num_bytes) override;
MojoResult ConsumerEndReadData(uint32_t num_bytes_read) override;
HandleSignalsState ConsumerGetHandleSignalsState() const override;
void ConsumerStartSerialize(Channel* channel,
diff --git a/mojo/edk/system/remote_consumer_data_pipe_impl.cc b/mojo/edk/system/remote_consumer_data_pipe_impl.cc
index ce0c240..7bbafb3 100644
--- a/mojo/edk/system/remote_consumer_data_pipe_impl.cc
+++ b/mojo/edk/system/remote_consumer_data_pipe_impl.cc
@@ -177,8 +177,7 @@
MojoResult RemoteConsumerDataPipeImpl::ProducerBeginWriteData(
UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_write) {
+ UserPointer<uint32_t> buffer_num_bytes) {
DCHECK(consumer_open());
DCHECK(channel_endpoint_);
@@ -186,12 +185,6 @@
DCHECK_EQ(consumer_num_bytes_ % element_num_bytes(), 0u);
size_t max_num_bytes_to_write = capacity_num_bytes() - consumer_num_bytes_;
- if (min_num_bytes_to_write > max_num_bytes_to_write) {
- // Don't return "should wait" since you can't wait for a specified amount
- // of data.
- return MOJO_RESULT_OUT_OF_RANGE;
- }
-
// Don't go into a two-phase write if there's no room.
if (max_num_bytes_to_write == 0)
return MOJO_RESULT_SHOULD_WAIT;
@@ -343,8 +336,7 @@
MojoResult RemoteConsumerDataPipeImpl::ConsumerBeginReadData(
UserPointer<const void*> /*buffer*/,
- UserPointer<uint32_t> /*buffer_num_bytes*/,
- uint32_t /*min_num_bytes_to_read*/) {
+ UserPointer<uint32_t> /*buffer_num_bytes*/) {
NOTREACHED();
return MOJO_RESULT_INTERNAL;
}
diff --git a/mojo/edk/system/remote_consumer_data_pipe_impl.h b/mojo/edk/system/remote_consumer_data_pipe_impl.h
index 1bcd989..2131c96 100644
--- a/mojo/edk/system/remote_consumer_data_pipe_impl.h
+++ b/mojo/edk/system/remote_consumer_data_pipe_impl.h
@@ -50,9 +50,9 @@
UserPointer<uint32_t> num_bytes,
uint32_t max_num_bytes_to_write,
uint32_t min_num_bytes_to_write) override;
- MojoResult ProducerBeginWriteData(UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_write) override;
+ MojoResult ProducerBeginWriteData(
+ UserPointer<void*> buffer,
+ UserPointer<uint32_t> buffer_num_bytes) override;
MojoResult ProducerEndWriteData(uint32_t num_bytes_written) override;
HandleSignalsState ProducerGetHandleSignalsState() const override;
void ProducerStartSerialize(Channel* channel,
@@ -73,9 +73,9 @@
uint32_t max_num_bytes_to_discard,
uint32_t min_num_bytes_to_discard) override;
MojoResult ConsumerQueryData(UserPointer<uint32_t> num_bytes) override;
- MojoResult ConsumerBeginReadData(UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_read) override;
+ MojoResult ConsumerBeginReadData(
+ UserPointer<const void*> buffer,
+ UserPointer<uint32_t> buffer_num_bytes) override;
MojoResult ConsumerEndReadData(uint32_t num_bytes_read) override;
HandleSignalsState ConsumerGetHandleSignalsState() const override;
void ConsumerStartSerialize(Channel* channel,
diff --git a/mojo/edk/system/remote_data_pipe_impl_unittest.cc b/mojo/edk/system/remote_data_pipe_impl_unittest.cc
index 6464564..23b464f 100644
--- a/mojo/edk/system/remote_data_pipe_impl_unittest.cc
+++ b/mojo/edk/system/remote_data_pipe_impl_unittest.cc
@@ -291,11 +291,11 @@
DataPipeConsumerDispatcher::Create();
consumer->Init(dp);
- uint32_t num_bytes = static_cast<uint32_t>(10u * sizeof(int32_t));
void* write_ptr = nullptr;
+ uint32_t num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
ASSERT_GE(num_bytes, 1u * sizeof(int32_t));
// Write the consumer to MP 0 (port 0). Wait and receive on MP 1 (port 0).
@@ -401,21 +401,21 @@
DataPipeConsumerDispatcher::Create();
consumer->Init(dp);
- uint32_t num_bytes = static_cast<uint32_t>(10u * sizeof(int32_t));
void* write_ptr = nullptr;
+ uint32_t num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
ASSERT_GE(num_bytes, 1u * sizeof(int32_t));
*static_cast<int32_t*>(write_ptr) = 123456;
EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(
static_cast<uint32_t>(1u * sizeof(int32_t))));
- num_bytes = static_cast<uint32_t>(10u * sizeof(int32_t));
write_ptr = nullptr;
+ num_bytes = 0u;
EXPECT_EQ(MOJO_RESULT_OK,
dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
- MakeUserPointer(&num_bytes), false));
+ MakeUserPointer(&num_bytes)));
ASSERT_GE(num_bytes, 1u * sizeof(int32_t));
// Write the consumer to MP 0 (port 0). Wait and receive on MP 1 (port 0).
diff --git a/mojo/edk/system/remote_producer_data_pipe_impl.cc b/mojo/edk/system/remote_producer_data_pipe_impl.cc
index 847949f..abf1e96 100644
--- a/mojo/edk/system/remote_producer_data_pipe_impl.cc
+++ b/mojo/edk/system/remote_producer_data_pipe_impl.cc
@@ -133,8 +133,7 @@
MojoResult RemoteProducerDataPipeImpl::ProducerBeginWriteData(
UserPointer<void*> /*buffer*/,
- UserPointer<uint32_t> /*buffer_num_bytes*/,
- uint32_t /*min_num_bytes_to_write*/) {
+ UserPointer<uint32_t> /*buffer_num_bytes*/) {
NOTREACHED();
return MOJO_RESULT_INTERNAL;
}
@@ -250,16 +249,8 @@
MojoResult RemoteProducerDataPipeImpl::ConsumerBeginReadData(
UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_read) {
+ UserPointer<uint32_t> buffer_num_bytes) {
size_t max_num_bytes_to_read = GetMaxNumBytesToRead();
- if (min_num_bytes_to_read > max_num_bytes_to_read) {
- // Don't return "should wait" since you can't wait for a specified amount of
- // data.
- return producer_open() ? MOJO_RESULT_OUT_OF_RANGE
- : MOJO_RESULT_FAILED_PRECONDITION;
- }
-
// Don't go into a two-phase read if there's no data.
if (max_num_bytes_to_read == 0) {
return producer_open() ? MOJO_RESULT_SHOULD_WAIT
diff --git a/mojo/edk/system/remote_producer_data_pipe_impl.h b/mojo/edk/system/remote_producer_data_pipe_impl.h
index 617cf9d..cea3d28 100644
--- a/mojo/edk/system/remote_producer_data_pipe_impl.h
+++ b/mojo/edk/system/remote_producer_data_pipe_impl.h
@@ -50,9 +50,9 @@
UserPointer<uint32_t> num_bytes,
uint32_t max_num_bytes_to_write,
uint32_t min_num_bytes_to_write) override;
- MojoResult ProducerBeginWriteData(UserPointer<void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_write) override;
+ MojoResult ProducerBeginWriteData(
+ UserPointer<void*> buffer,
+ UserPointer<uint32_t> buffer_num_bytes) override;
MojoResult ProducerEndWriteData(uint32_t num_bytes_written) override;
HandleSignalsState ProducerGetHandleSignalsState() const override;
void ProducerStartSerialize(Channel* channel,
@@ -73,9 +73,9 @@
uint32_t max_num_bytes_to_discard,
uint32_t min_num_bytes_to_discard) override;
MojoResult ConsumerQueryData(UserPointer<uint32_t> num_bytes) override;
- MojoResult ConsumerBeginReadData(UserPointer<const void*> buffer,
- UserPointer<uint32_t> buffer_num_bytes,
- uint32_t min_num_bytes_to_read) override;
+ MojoResult ConsumerBeginReadData(
+ UserPointer<const void*> buffer,
+ UserPointer<uint32_t> buffer_num_bytes) override;
MojoResult ConsumerEndReadData(uint32_t num_bytes_read) override;
HandleSignalsState ConsumerGetHandleSignalsState() const override;
void ConsumerStartSerialize(Channel* channel,