Chromium Code Reviews| Index: blimp/net/stream_packet_reader.cc |
| diff --git a/blimp/net/stream_packet_reader.cc b/blimp/net/stream_packet_reader.cc |
| index 8da613020feaf66b7a840a186121379cbe6647cc..e50074865076abb84b88230070557093e2839f5e 100644 |
| --- a/blimp/net/stream_packet_reader.cc |
| +++ b/blimp/net/stream_packet_reader.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/callback_helpers.h" |
| #include "base/logging.h" |
| #include "base/memory/weak_ptr.h" |
| +#include "base/message_loop/message_loop.h" |
| #include "base/sys_byteorder.h" |
| #include "blimp/net/common.h" |
| #include "net/base/io_buffer.h" |
| @@ -42,7 +43,7 @@ StreamPacketReader::StreamPacketReader(net::StreamSocket* socket) |
| StreamPacketReader::~StreamPacketReader() {} |
| -int StreamPacketReader::ReadPacket( |
| +void StreamPacketReader::ReadPacket( |
| const scoped_refptr<net::GrowableIOBuffer>& buf, |
| const net::CompletionCallback& callback) { |
| DCHECK_EQ(ReadState::IDLE, read_state_); |
| @@ -54,17 +55,17 @@ int StreamPacketReader::ReadPacket( |
| read_state_ = ReadState::HEADER; |
| int result = DoReadLoop(net::OK); |
| - if (result == net::ERR_IO_PENDING) { |
| - // Store the completion callback to invoke when read completes |
| - // asynchronously. |
| - callback_ = callback; |
| - } else { |
| + if (result != net::ERR_IO_PENDING) { |
| // Release the payload buffer, since the read 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
Seems fine to me - |callback| is supplied by the c
|
| + } else { |
| + callback_ = callback; |
| + } |
| } |
| int StreamPacketReader::DoReadLoop(int result) { |
| @@ -134,7 +135,7 @@ int StreamPacketReader::DoReadPayload(int result) { |
| // Finished reading the payload. |
| read_state_ = ReadState::IDLE; |
| - return payload_size_; |
| + return net::OK; |
| } |
| void StreamPacketReader::OnReadComplete(int result) { |