| 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 54faeeb98f66e55659ec95069ae84ae9fae28cd6..74d3166986f223d798d66aa76ff31c436fb789d0 100644
|
| --- a/mojo/public/dart/mojo/lib/src/stub.dart
|
| +++ b/mojo/public/dart/mojo/lib/src/stub.dart
|
| @@ -19,27 +19,23 @@ 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.data == null) || (result.dataLength == 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.data, result.handles,
|
| + result.dataLength, result.handlesLength));
|
| response = _isClosing ? null : handleMessage(message);
|
| } catch (e) {
|
| - handles.forEach((h) => h.close());
|
| + if (result.handles != null) {
|
| + result.handles.forEach((h) => h.close());
|
| + }
|
| rethrow;
|
| }
|
|
|
|
|