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

Unified Diff: blimp/net/stream_packet_writer.cc

Issue 1452823011: Make PacketReader/PacketWriter interfaces async-only. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rehabbed tests, addressed feedback, made changes to BlimpMessagePump Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: blimp/net/stream_packet_writer.cc
diff --git a/blimp/net/stream_packet_writer.cc b/blimp/net/stream_packet_writer.cc
index 221cdd170e7fa87eb5b0f31742de8e8b9591f4f8..943f9a9d403e1be6042c9750275e2d3c26609aa6 100644
--- a/blimp/net/stream_packet_writer.cc
+++ b/blimp/net/stream_packet_writer.cc
@@ -47,15 +47,11 @@ StreamPacketWriter::StreamPacketWriter(net::StreamSocket* socket)
StreamPacketWriter::~StreamPacketWriter() {}
-int StreamPacketWriter::WritePacket(scoped_refptr<net::DrainableIOBuffer> data,
- const net::CompletionCallback& callback) {
+void StreamPacketWriter::WritePacket(scoped_refptr<net::DrainableIOBuffer> data,
+ const net::CompletionCallback& callback) {
DCHECK_EQ(WriteState::IDLE, write_state_);
DCHECK(data);
- if (data->BytesRemaining() == 0) {
- // The packet is empty; your argument is invalid.
- DLOG(ERROR) << "Attempted to write zero-length packet.";
- return net::ERR_INVALID_ARGUMENT;
- }
+ CHECK(data->BytesRemaining());
write_state_ = WriteState::HEADER;
header_buffer_->SetOffset(0);
@@ -63,18 +59,18 @@ int StreamPacketWriter::WritePacket(scoped_refptr<net::DrainableIOBuffer> data,
base::HostToNet32(data->BytesRemaining());
payload_buffer_ = data;
- int result = DoWriteLoop(false);
- if (result == net::ERR_IO_PENDING) {
- // Store the completion callback to invoke when DoWriteLoop completes
- // asynchronously.
- callback_ = callback;
- } else {
+ int result = DoWriteLoop(net::OK);
+ if (result != net::ERR_IO_PENDING) {
// Release the payload buffer, since the write operation has completed
// synchronously.
payload_buffer_ = nullptr;
- }
- return result;
+ // Adapt synchronous completion to an asynchronous style.
+ base::MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(callback, result));
Wez 2015/12/01 22:34:45 What happens if _this_ is deleted by the caller be
Kevin M 2015/12/02 02:02:37 This seems fine? |callback| doesn't re-enter any c
+ } else {
+ callback_ = callback;
+ }
}
int StreamPacketWriter::DoWriteLoop(int result) {

Powered by Google App Engine
This is Rietveld 408576698