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

Unified Diff: remoting/protocol/message_reader.cc

Issue 1143443003: Fix MessageReader to pass errors to the channel (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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/protocol/message_reader.h ('k') | remoting/protocol/message_reader_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/message_reader.cc
diff --git a/remoting/protocol/message_reader.cc b/remoting/protocol/message_reader.cc
index 6e3d5369bf2ca690b8e4d4ce740b176dbf30a4a9..193889115761d25b0880b42b5ba71c3c70579d5c 100644
--- a/remoting/protocol/message_reader.cc
+++ b/remoting/protocol/message_reader.cc
@@ -38,10 +38,15 @@ void MessageReader::SetMessageReceivedCallback(
message_received_callback_ = callback;
}
-void MessageReader::StartReading(net::Socket* socket) {
+void MessageReader::StartReading(
+ net::Socket* socket,
+ const ReadFailedCallback& read_failed_callback) {
DCHECK(CalledOnValidThread());
DCHECK(socket);
+ DCHECK(!read_failed_callback.is_null());
+
socket_ = socket;
+ read_failed_callback_ = read_failed_callback;
DoRead();
}
@@ -49,13 +54,16 @@ void MessageReader::DoRead() {
DCHECK(CalledOnValidThread());
// Don't try to read again if there is another read pending or we
// have messages that we haven't finished processing yet.
- while (!closed_ && !read_pending_ && pending_messages_ == 0) {
+ bool read_succeeded = true;
+ while (read_succeeded && !closed_ && !read_pending_ &&
+ pending_messages_ == 0) {
read_buffer_ = new net::IOBuffer(kReadBufferSize);
int result = socket_->Read(
read_buffer_.get(),
kReadBufferSize,
base::Bind(&MessageReader::OnRead, weak_factory_.GetWeakPtr()));
- HandleReadResult(result);
+
+ HandleReadResult(result, &read_succeeded);
}
}
@@ -65,26 +73,34 @@ void MessageReader::OnRead(int result) {
read_pending_ = false;
if (!closed_) {
- HandleReadResult(result);
- DoRead();
+ bool read_succeeded;
+ HandleReadResult(result, &read_succeeded);
+ if (read_succeeded)
+ DoRead();
}
}
-void MessageReader::HandleReadResult(int result) {
+void MessageReader::HandleReadResult(int result, bool* read_succeeded) {
DCHECK(CalledOnValidThread());
if (closed_)
return;
+ *read_succeeded = true;
+
if (result > 0) {
OnDataReceived(read_buffer_.get(), result);
+ *read_succeeded = true;
} else if (result == net::ERR_IO_PENDING) {
read_pending_ = true;
} else {
- if (result != net::ERR_CONNECTION_CLOSED) {
- LOG(ERROR) << "Read() returned error " << result;
- }
+ DCHECK_LT(result, 0);
+
// Stop reading after any error.
closed_ = true;
+ *read_succeeded = false;
+
+ LOG(ERROR) << "Read() returned error " << result;
+ read_failed_callback_.Run(result);
}
}
« no previous file with comments | « remoting/protocol/message_reader.h ('k') | remoting/protocol/message_reader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698