| 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..d8ac8350a74f506031ee650499855a50ab1be17c 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));
|
| + } else {
|
| + callback_ = callback;
|
| + }
|
| }
|
|
|
| int StreamPacketReader::DoReadLoop(int result) {
|
|
|