| Index: sdk/lib/async/stream_controller.dart
|
| diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart
|
| index 50490f5976d76a45c80302557b07e96b19ef4878..fe3fbddc72973bff4d4a5d909155a5da1540c08f 100644
|
| --- a/sdk/lib/async/stream_controller.dart
|
| +++ b/sdk/lib/async/stream_controller.dart
|
| @@ -415,6 +415,11 @@ abstract class _StreamController<T> implements StreamController<T>,
|
| */
|
| void addError(Object error, [StackTrace stackTrace]) {
|
| if (!_mayAddEvent) throw _badEventState();
|
| + AsyncError replacement = Zone.current.errorCallback(error, stackTrace);
|
| + if (replacement != null) {
|
| + error = replacement.error;
|
| + stackTrace = replacement.stackTrace;
|
| + }
|
| _addError(error, stackTrace);
|
| }
|
|
|
| @@ -436,13 +441,17 @@ abstract class _StreamController<T> implements StreamController<T>,
|
| return _ensureDoneFuture();
|
| }
|
| if (!_mayAddEvent) throw _badEventState();
|
| + _closeUnchecked();
|
| + return _ensureDoneFuture();
|
| + }
|
| +
|
| + void _closeUnchecked() {
|
| _state |= _STATE_CLOSED;
|
| if (hasListener) {
|
| _sendDone();
|
| } else if (_isInitialState) {
|
| _ensurePendingEvents().add(const _DelayedDone());
|
| }
|
| - return _ensureDoneFuture();
|
| }
|
|
|
| // EventSink interface. Used by the [addStream] events.
|
|
|