Index: mojo/public/dart/mojo/lib/src/stub.dart |
diff --git a/mojo/public/dart/mojo/lib/src/stub.dart b/mojo/public/dart/mojo/lib/src/stub.dart |
index 4957dd9702a7a737e1266837a4ba326466368d04..7ea00593e1f318f7a5b8e9899e5e6482831f0eaf 100644 |
--- a/mojo/public/dart/mojo/lib/src/stub.dart |
+++ b/mojo/public/dart/mojo/lib/src/stub.dart |
@@ -19,27 +19,22 @@ abstract class Stub extends core.MojoEventStreamListener { |
dynamic handleMessage(ServiceMessage message); |
void handleRead() { |
- // Query how many bytes are available. |
- var result = endpoint.query(); |
- assert(result.status.isOk || result.status.isResourceExhausted); |
- if (result.bytesRead == 0) { |
- throw new MojoCodecError('Unexpected empty message: $this'); |
+ var result = endpoint.queryAndRead(); |
+ if ((result.bytesRead == null) || (result.bytesRead.length == 0)) { |
+ throw new MojoCodecError('Unexpected empty message or error: $result'); |
} |
- // Read the data and view as a message. |
- var bytes = new ByteData(result.bytesRead); |
- var handles = new List<core.MojoHandle>(result.handlesRead); |
- result = endpoint.read(bytes, result.bytesRead, handles); |
- assert(result.status.isOk || result.status.isResourceExhausted); |
- |
// Prepare the response. |
var message; |
var response; |
try { |
- message = new ServiceMessage.fromMessage(new Message(bytes, handles)); |
+ message = new ServiceMessage.fromMessage( |
+ new Message(result.bytesRead, result.handlesRead)); |
response = _isClosing ? null : handleMessage(message); |
} catch (e) { |
- handles.forEach((h) => h.close()); |
+ if (result.handlesRead != null) { |
+ result.handlesRead.forEach((h) => h.close()); |
+ } |
rethrow; |
} |