Index: third_party/mojo/src/mojo/public/dart/src/event_stream.dart |
diff --git a/third_party/mojo/src/mojo/public/dart/src/event_stream.dart b/third_party/mojo/src/mojo/public/dart/src/event_stream.dart |
index 645334e835ac2460fc7389acd84814f99dc0252a..712d0259f8308868891e9a6f65bdb2b3d612e7ee 100644 |
--- a/third_party/mojo/src/mojo/public/dart/src/event_stream.dart |
+++ b/third_party/mojo/src/mojo/public/dart/src/event_stream.dart |
@@ -64,7 +64,8 @@ class MojoEventStream extends Stream<List<int>> { |
_controller.addStream(_receivePort).whenComplete(_controller.close); |
if (_signals != MojoHandleSignals.NONE) { |
- var res = MojoHandleWatcher.add(_handle, _sendPort, _signals.value); |
+ var res = new MojoResult( |
+ MojoHandleWatcher.add(_handle.h, _sendPort, _signals.value)); |
if (!res.isOk) { |
throw "MojoHandleWatcher add failed: $res"; |
} |
@@ -78,7 +79,8 @@ class MojoEventStream extends Stream<List<int>> { |
void enableSignals(MojoHandleSignals signals) { |
_signals = signals; |
if (_isListening) { |
- var res = MojoHandleWatcher.add(_handle, _sendPort, signals.value); |
+ var res = new MojoResult( |
+ MojoHandleWatcher.add(_handle.h, _sendPort, signals.value)); |
if (!res.isOk) { |
throw "MojoHandleWatcher add failed: $res"; |
} |
@@ -92,11 +94,13 @@ class MojoEventStream extends Stream<List<int>> { |
Future _handleWatcherClose() { |
assert(_handle != null); |
- return MojoHandleWatcher.close(_handle, wait: true).then((_) { |
+ assert(MojoHandle._removeUnclosedHandle(_handle)); |
+ return MojoHandleWatcher.close(_handle.h, wait: true).then((r) { |
if (_receivePort != null) { |
_receivePort.close(); |
_receivePort = null; |
} |
+ return new MojoResult(r); |
}); |
} |
@@ -118,12 +122,13 @@ class MojoEventStream extends Stream<List<int>> { |
void _onPauseStateChange() { |
if (_controller.isPaused) { |
- var res = MojoHandleWatcher.remove(_handle); |
+ var res = new MojoResult(MojoHandleWatcher.remove(_handle.h)); |
if (!res.isOk) { |
throw "MojoHandleWatcher add failed: $res"; |
} |
} else { |
- var res = MojoHandleWatcher.add(_handle, _sendPort, _signals.value); |
+ var res = new MojoResult( |
+ MojoHandleWatcher.add(_handle.h, _sendPort, _signals.value)); |
if (!res.isOk) { |
throw "MojoHandleWatcher add failed: $res"; |
} |
@@ -200,21 +205,24 @@ class MojoEventStreamListener { |
assert(_eventStream.readyWrite); |
handleWrite(); |
} |
- if (_isOpen) { |
+ if (!signalsReceived.isPeerClosed) { |
_eventStream.enableSignals(signalsWatched); |
} |
_isInHandler = false; |
if (signalsReceived.isPeerClosed) { |
- if (onError != null) { |
- onError(); |
- } |
- close(); |
+ // nodefer is true here because there is no need to wait to close until |
+ // outstanding messages are sent. The other side is gone. |
+ close(nodefer: true).then((_) { |
+ if (onError != null) { |
+ onError(); |
+ } |
+ }); |
} |
}, onDone: close); |
return subscription; |
} |
- Future close() { |
+ Future close({bool nodefer: false}) { |
var result; |
_isOpen = false; |
_endpoint = null; |