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

Unified Diff: remoting/base/buffered_socket_writer.cc

Issue 1582583003: Fix BufferedSocketWriter to buffer everything before it starts writing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months 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
« no previous file with comments | « remoting/base/buffered_socket_writer.h ('k') | remoting/base/buffered_socket_writer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
« no previous file with comments | « remoting/base/buffered_socket_writer.h ('k') | remoting/base/buffered_socket_writer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698