Index: mojo/system/raw_channel.cc |
diff --git a/mojo/system/raw_channel.cc b/mojo/system/raw_channel.cc |
index be45641540eebdc102c4b0ee8440575183ff8c60..036fa798c3408d1660055ceb818b1ba3b58e0a4d 100644 |
--- a/mojo/system/raw_channel.cc |
+++ b/mojo/system/raw_channel.cc |
@@ -284,12 +284,10 @@ void RawChannel::OnReadCompleted(IOResult io_result, size_t bytes_read) { |
case IO_SUCCEEDED: |
break; |
case IO_FAILED_SHUTDOWN: |
- read_stopped_ = true; |
- CallOnError(Delegate::ERROR_READ_SHUTDOWN); |
- return; |
+ case IO_FAILED_BROKEN: |
case IO_FAILED_UNKNOWN: |
read_stopped_ = true; |
- CallOnError(Delegate::ERROR_READ_UNKNOWN); |
+ CallOnError(ReadIOResultToError(io_result)); |
return; |
case IO_PENDING: |
NOTREACHED(); |
@@ -456,6 +454,24 @@ bool RawChannel::OnReadMessageForRawChannel( |
return false; |
} |
+// static |
+RawChannel::Delegate::Error RawChannel::ReadIOResultToError( |
+ IOResult io_result) { |
+ switch (io_result) { |
+ case IO_FAILED_SHUTDOWN: |
+ return Delegate::ERROR_READ_SHUTDOWN; |
+ case IO_FAILED_BROKEN: |
+ return Delegate::ERROR_READ_BROKEN; |
+ case IO_FAILED_UNKNOWN: |
+ return Delegate::ERROR_READ_UNKNOWN; |
+ case IO_SUCCEEDED: |
+ case IO_PENDING: |
+ NOTREACHED(); |
+ break; |
+ } |
+ return Delegate::ERROR_READ_UNKNOWN; |
+} |
+ |
void RawChannel::CallOnError(Delegate::Error error) { |
DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io_); |
// TODO(vtl): Add a "write_lock_.AssertNotAcquired()"? |