| Index: remoting/base/buffered_socket_writer.cc
|
| diff --git a/remoting/base/buffered_socket_writer.cc b/remoting/base/buffered_socket_writer.cc
|
| index 405e37b579db6d4e3bd613ef2ef677208932cdfb..48d8196d506ba2861dbfe9151bce77729a002e54 100644
|
| --- a/remoting/base/buffered_socket_writer.cc
|
| +++ b/remoting/base/buffered_socket_writer.cc
|
| @@ -5,6 +5,7 @@
|
| #include "remoting/base/buffered_socket_writer.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/callback_helpers.h"
|
| #include "base/stl_util.h"
|
| #include "net/base/io_buffer.h"
|
| #include "net/base/net_errors.h"
|
| @@ -39,7 +40,7 @@ scoped_ptr<BufferedSocketWriter> BufferedSocketWriter::CreateForSocket(
|
| net::Socket* socket,
|
| const WriteFailedCallback& write_failed_callback) {
|
| scoped_ptr<BufferedSocketWriter> result(new BufferedSocketWriter());
|
| - result->Init(base::Bind(&WriteNetSocket, socket), write_failed_callback);
|
| + result->Start(base::Bind(&WriteNetSocket, socket), write_failed_callback);
|
| return result;
|
| }
|
|
|
| @@ -49,11 +50,12 @@ BufferedSocketWriter::~BufferedSocketWriter() {
|
| STLDeleteElements(&queue_);
|
| }
|
|
|
| -void BufferedSocketWriter::Init(
|
| +void BufferedSocketWriter::Start(
|
| const WriteCallback& write_callback,
|
| const WriteFailedCallback& write_failed_callback) {
|
| write_callback_ = write_callback;
|
| write_failed_callback_ = write_failed_callback;
|
| + DoWrite();
|
| }
|
|
|
| void BufferedSocketWriter::Write(
|
| @@ -63,7 +65,7 @@ void BufferedSocketWriter::Write(
|
| DCHECK(data.get());
|
|
|
| // Don't write after error.
|
| - if (is_closed())
|
| + if (closed_)
|
| return;
|
|
|
| queue_.push_back(new PendingPacket(
|
| @@ -72,15 +74,12 @@ void BufferedSocketWriter::Write(
|
| DoWrite();
|
| }
|
|
|
| -bool BufferedSocketWriter::is_closed() {
|
| - return write_callback_.is_null();
|
| -}
|
| -
|
| void BufferedSocketWriter::DoWrite() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| base::WeakPtr<BufferedSocketWriter> self = weak_factory_.GetWeakPtr();
|
| - while (self && !write_pending_ && !is_closed() && !queue_.empty()) {
|
| + while (self && !write_pending_ && !write_callback_.is_null() &&
|
| + !queue_.empty()) {
|
| int result = write_callback_.Run(
|
| queue_.front()->data.get(), queue_.front()->data->BytesRemaining(),
|
| base::Bind(&BufferedSocketWriter::OnWritten,
|
| @@ -94,11 +93,10 @@ void BufferedSocketWriter::HandleWriteResult(int result) {
|
| if (result == net::ERR_IO_PENDING) {
|
| write_pending_ = true;
|
| } else {
|
| + closed_ = true;
|
| write_callback_.Reset();
|
| - if (!write_failed_callback_.is_null()) {
|
| - WriteFailedCallback callback = write_failed_callback_;
|
| - callback.Run(result);
|
| - }
|
| + if (!write_failed_callback_.is_null())
|
| + base::ResetAndReturn(&write_failed_callback_).Run(result);
|
| }
|
| return;
|
| }
|
|
|