Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Unified Diff: sdk/lib/_internal/pub/lib/src/io.dart

Issue 68493003: Ensure that errors have stack traces attached. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub/lib/src/io.dart
diff --git a/sdk/lib/_internal/pub/lib/src/io.dart b/sdk/lib/_internal/pub/lib/src/io.dart
index 40f09bf0b1c781846477cb09a7bf4bb2b0cf0efb..89179ebdac869de0b23d9f0d32789c3c08526c95 100644
--- a/sdk/lib/_internal/pub/lib/src/io.dart
+++ b/sdk/lib/_internal/pub/lib/src/io.dart
@@ -12,6 +12,8 @@ import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:http/http.dart' show ByteStream;
+import 'package:stack_trace/stack_trace.dart';
+
import 'error_group.dart';
import 'log.dart' as log;
import 'sdk.dart' as sdk;
@@ -462,19 +464,16 @@ Pair<EventSink, Future> consumerToSink(StreamConsumer consumer) {
Future store(Stream stream, EventSink sink,
{bool cancelOnError: true, bool closeSink: true}) {
var completer = new Completer();
- stream.listen(sink.add,
- onError: (e, [stackTrace]) {
- // TODO(floitsch): Sink.addError without stack trace.
- sink.addError(e);
- if (cancelOnError) {
- completer.complete();
- if (closeSink) sink.close();
- }
- },
- onDone: () {
- if (closeSink) sink.close();
- completer.complete();
- }, cancelOnError: cancelOnError);
+ stream.listen(sink.add, onError: (e, stackTrace) {
+ sink.addError(e, stackTrace);
+ if (cancelOnError) {
+ completer.complete();
+ if (closeSink) sink.close();
+ }
+ }, onDone: () {
+ if (closeSink) sink.close();
+ completer.complete();
+ }, cancelOnError: cancelOnError);
return completer.future;
}
@@ -634,16 +633,17 @@ Future timeout(Future input, int milliseconds, String description) {
var completer = new Completer();
var timer = new Timer(new Duration(milliseconds: milliseconds), () {
completer.completeError(new TimeoutException(
- 'Timed out while $description.'));
+ 'Timed out while $description.'),
+ new Trace.current());
});
input.then((value) {
if (completer.isCompleted) return;
timer.cancel();
completer.complete(value);
- }).catchError((e) {
+ }).catchError((e, stackTrace) {
if (completer.isCompleted) return;
timer.cancel();
- completer.completeError(e);
+ completer.completeError(e, stackTrace);
});
return completer.future;
}
@@ -775,10 +775,10 @@ ByteStream createTarGz(List contents, {baseDir}) {
// file and pass them in via --files-from for tar and -i@filename for 7zip.
startProcess("tar", args).then((process) {
store(process.stdout, controller);
- }).catchError((e) {
+ }).catchError((e, stackTrace) {
// We don't have to worry about double-signaling here, since the store()
// above will only be reached if startProcess succeeds.
- controller.addError(e);
+ controller.addError(e, stackTrace);
controller.close();
});
return new ByteStream(controller.stream);
@@ -807,10 +807,10 @@ ByteStream createTarGz(List contents, {baseDir}) {
// occurs.
return store(process.stdout, controller);
});
- }).catchError((e) {
+ }).catchError((e, stackTrace) {
// We don't have to worry about double-signaling here, since the store()
// above will only be reached if everything succeeds.
- controller.addError(e);
+ controller.addError(e, stackTrace);
controller.close();
});
return new ByteStream(controller.stream);
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/barback/server.dart ('k') | sdk/lib/_internal/pub/lib/src/safe_http_server.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698