Index: mojo/public/dart/src/event_stream.dart |
diff --git a/mojo/public/dart/src/event_stream.dart b/mojo/public/dart/src/event_stream.dart |
index 712d0259f8308868891e9a6f65bdb2b3d612e7ee..b040f7c7294b3def06e21a5905952bc58092321f 100644 |
--- a/mojo/public/dart/src/event_stream.dart |
+++ b/mojo/public/dart/src/event_stream.dart |
@@ -37,12 +37,12 @@ class MojoEventStream extends Stream<List<int>> { |
} |
} |
- Future close() { |
+ Future close({bool immediate: false}) { |
if (_handle != null) { |
if (_isListening) { |
- return _handleWatcherClose(); |
+ return _handleWatcherClose(immediate: immediate); |
} else { |
- _localClose(); |
+ _localClose(immediate: immediate); |
return new Future.value(null); |
} |
} |
@@ -92,10 +92,10 @@ class MojoEventStream extends Stream<List<int>> { |
void enableWriteEvents() => enableSignals(MojoHandleSignals.WRITABLE); |
void enableAllEvents() => enableSignals(MojoHandleSignals.READWRITE); |
- Future _handleWatcherClose() { |
+ Future _handleWatcherClose({bool immediate: false}) { |
assert(_handle != null); |
assert(MojoHandle._removeUnclosedHandle(_handle)); |
- return MojoHandleWatcher.close(_handle.h, wait: true).then((r) { |
+ return MojoHandleWatcher.close(_handle.h, wait: !immediate).then((r) { |
if (_receivePort != null) { |
_receivePort.close(); |
_receivePort = null; |
@@ -104,7 +104,7 @@ class MojoEventStream extends Stream<List<int>> { |
}); |
} |
- void _localClose() { |
+ void _localClose({bool immediate: false}) { |
zra
2015/04/07 19:49:46
Is this needed for something?
Cutch
2015/04/07 19:52:12
It's not needed, I was just passing the value down
|
assert(_handle != null); |
_handle.close(); |
_handle = null; |
@@ -116,7 +116,8 @@ class MojoEventStream extends Stream<List<int>> { |
void _onSubscriptionStateChange() { |
if (!_controller.hasListener) { |
- close(); |
+ // No one is listening, close it immediately. |
+ close(immediate: true); |
} |
} |
@@ -210,9 +211,9 @@ class MojoEventStreamListener { |
} |
_isInHandler = false; |
if (signalsReceived.isPeerClosed) { |
- // 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((_) { |
+ // immediate is true here because there is no need to wait to close |
+ // until outstanding messages are sent. The other side is gone. |
+ close(immediate: true).then((_) { |
if (onError != null) { |
onError(); |
} |
@@ -222,13 +223,13 @@ class MojoEventStreamListener { |
return subscription; |
} |
- Future close({bool nodefer: false}) { |
+ Future close({bool immediate: false}) { |
var result; |
_isOpen = false; |
_endpoint = null; |
subscription = null; |
if (_eventStream != null) { |
- result = _eventStream.close().then((_) { |
+ result = _eventStream.close(immediate: immediate).then((_) { |
_eventStream = null; |
}); |
} |