Index: sdk/lib/async/stream_impl.dart |
diff --git a/sdk/lib/async/stream_impl.dart b/sdk/lib/async/stream_impl.dart |
index cb2e20d0f1373c8ec59700d85e76e81e2dc91f5a..8c9af64bb9e01fd4bfe9511e9024117bcce3e8e8 100644 |
--- a/sdk/lib/async/stream_impl.dart |
+++ b/sdk/lib/async/stream_impl.dart |
@@ -188,10 +188,9 @@ class _BufferingStreamSubscription<T> implements StreamSubscription<T>, |
// error or done event pending (waiting for the cancel to be done) discard |
// that event. |
_state &= ~_STATE_WAIT_FOR_CANCEL; |
- if (!_isCanceled) { |
- _cancel(); |
- } |
- return _cancelFuture ?? Future._nullFuture; |
+ if (_isCanceled) return _cancelFuture; |
+ _cancel(); |
+ return _cancelFuture; |
} |
Future/*<E>*/ asFuture/*<E>*/([var/*=E*/ futureValue]) { |
@@ -200,14 +199,8 @@ class _BufferingStreamSubscription<T> implements StreamSubscription<T>, |
// Overwrite the onDone and onError handlers. |
_onDone = () { result._complete(futureValue); }; |
_onError = (error, stackTrace) { |
- Future cancelFuture = cancel(); |
- if (!identical(cancelFuture, Future._nullFuture)) { |
- cancelFuture.whenComplete(() { |
- result._completeError(error, stackTrace); |
- }); |
- } else { |
- result._completeError(error, stackTrace); |
- } |
+ cancel(); |
+ result._completeError(error, stackTrace); |
}; |
return result; |
@@ -368,8 +361,7 @@ class _BufferingStreamSubscription<T> implements StreamSubscription<T>, |
if (_cancelOnError) { |
_state |= _STATE_WAIT_FOR_CANCEL; |
_cancel(); |
- if (_cancelFuture is Future && |
- !identical(_cancelFuture, Future._nullFuture)) { |
+ if (_cancelFuture is Future) { |
_cancelFuture.whenComplete(sendError); |
} else { |
sendError(); |
@@ -397,8 +389,7 @@ class _BufferingStreamSubscription<T> implements StreamSubscription<T>, |
_cancel(); |
_state |= _STATE_WAIT_FOR_CANCEL; |
- if (_cancelFuture is Future && |
- !identical(_cancelFuture, Future._nullFuture)) { |
+ if (_cancelFuture is Future) { |
_cancelFuture.whenComplete(sendDone); |
} else { |
sendDone(); |
@@ -787,7 +778,7 @@ class _DoneStreamSubscription<T> implements StreamSubscription<T> { |
} |
} |
- Future cancel() => Future._nullFuture; |
+ Future cancel() => null; |
Future/*<E>*/ asFuture/*<E>*/([var/*=E*/ futureValue]) { |
_Future/*<E>*/ result = new _Future/*<E>*/(); |
@@ -925,7 +916,7 @@ class _BroadcastSubscriptionWrapper<T> implements StreamSubscription<T> { |
Future cancel() { |
_stream._cancelSubscription(); |
- return Future._nullFuture; |
+ return null; |
} |
bool get isPaused { |
@@ -1041,7 +1032,7 @@ class _StreamIteratorImpl<T> implements StreamIterator<T> { |
Future cancel() { |
StreamSubscription subscription = _subscription; |
- if (subscription == null) return Future._nullFuture; |
+ if (subscription == null) return null; |
if (_state == _STATE_MOVING) { |
_Future<bool> hasNext = _futureOrPrefetch as Object /*=_Future<bool>*/; |
_clear(); |