| Index: pkg/http/lib/src/utils.dart
 | 
| diff --git a/pkg/http/lib/src/utils.dart b/pkg/http/lib/src/utils.dart
 | 
| index 28e2bfbec3141a0f8a7e42fef898ff92b49d8738..bca314d95cf1828fe0f51b6b7b612b8d379d469c 100644
 | 
| --- a/pkg/http/lib/src/utils.dart
 | 
| +++ b/pkg/http/lib/src/utils.dart
 | 
| @@ -172,8 +172,7 @@ StreamConsumer<List<int>, dynamic> wrapOutputStream(OutputStream stream) =>
 | 
|  class _OutputStreamConsumer implements StreamConsumer<List<int>, dynamic> {
 | 
|    final OutputStream _outputStream;
 | 
|  
 | 
| -  _OutputStreamConsumer(this._outputStream)
 | 
| -    : super();
 | 
| +  _OutputStreamConsumer(this._outputStream);
 | 
|  
 | 
|    Future consume(Stream<List<int>> stream) {
 | 
|      // TODO(nweiz): we have to manually keep track of whether or not the
 | 
| @@ -182,19 +181,29 @@ class _OutputStreamConsumer implements StreamConsumer<List<int>, dynamic> {
 | 
|      // the following TODO.
 | 
|      var completed = false;
 | 
|      var completer = new Completer();
 | 
| -    stream.listen((data) => _outputStream.write(data), onDone: () {
 | 
| -      _outputStream.close();
 | 
| -      // TODO(nweiz): wait until _outputStream.onClosed is called once issue
 | 
| -      // 7761 is fixed.
 | 
| -      if (!completed) completer.complete();
 | 
| -      completed = true;
 | 
| -    });
 | 
| +    stream.listen((data) {
 | 
| +      // Writing empty data to a closed stream can cause errors.
 | 
| +      if (data.isEmpty) return;
 | 
| +
 | 
| +      // TODO(nweiz): remove this try/catch when issue 7836 is fixed.
 | 
| +      try {
 | 
| +        _outputStream.write(data);
 | 
| +      } catch (e, stack) {
 | 
| +        if (!completed) completer.completeError(e, stack);
 | 
| +        completed = true;
 | 
| +      }
 | 
| +    }, onDone: () => _outputStream.close());
 | 
|  
 | 
|      _outputStream.onError = (e) {
 | 
|        if (!completed) completer.completeError(e);
 | 
|        completed = true;
 | 
|      };
 | 
|  
 | 
| +    _outputStream.onClosed = () {
 | 
| +      if (!completed) completer.complete();
 | 
| +      completed = true;
 | 
| +    };
 | 
| +
 | 
|      return completer.future;
 | 
|    }
 | 
|  }
 | 
| 
 |