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

Side by Side Diff: sdk/lib/io/http_impl.dart

Issue 1010403002: Ensure that stack traces are propagated more often in dart:io. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Tab to space Created 5 years, 9 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/file_impl.dart ('k') | sdk/lib/io/http_parser.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.io; 5 part of dart.io;
6 6
7 const int _OUTGOING_BUFFER_SIZE = 8 * 1024; 7 const int _OUTGOING_BUFFER_SIZE = 8 * 1024;
8 8
9 class _HttpIncoming extends Stream<List<int>> { 9 class _HttpIncoming extends Stream<List<int>> {
10 final int _transferLength; 10 final int _transferLength;
(...skipping 1037 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 var future = writeHeaders(); 1048 var future = writeHeaders();
1049 if (future != null) { 1049 if (future != null) {
1050 // While incoming is being drained, the pauseFuture is non-null. Pause 1050 // While incoming is being drained, the pauseFuture is non-null. Pause
1051 // output until it's drained. 1051 // output until it's drained.
1052 sub.pause(future); 1052 sub.pause(future);
1053 } 1053 }
1054 } 1054 }
1055 return socket.addStream(controller.stream) 1055 return socket.addStream(controller.stream)
1056 .then((_) { 1056 .then((_) {
1057 return outbound; 1057 return outbound;
1058 }, onError: (error) { 1058 }, onError: (error, stackTrace) {
1059 // Be sure to close it in case of an error. 1059 // Be sure to close it in case of an error.
1060 if (_gzip) _gzipSink.close(); 1060 if (_gzip) _gzipSink.close();
1061 _socketError = true; 1061 _socketError = true;
1062 _doneCompleter.completeError(error); 1062 _doneCompleter.completeError(error, stackTrace);
1063 if (_ignoreError(error)) { 1063 if (_ignoreError(error)) {
1064 return outbound; 1064 return outbound;
1065 } else { 1065 } else {
1066 throw error; 1066 throw error;
1067 } 1067 }
1068 }); 1068 });
1069 } 1069 }
1070 1070
1071 Future close() { 1071 Future close() {
1072 // If we are already closed, return that future. 1072 // If we are already closed, return that future.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 } 1126 }
1127 // Clear references, for better GC. 1127 // Clear references, for better GC.
1128 _buffer = null; 1128 _buffer = null;
1129 // And finally flush it. As we support keep-alive, never close it from 1129 // And finally flush it. As we support keep-alive, never close it from
1130 // here. Once the socket is flushed, we'll be able to reuse it (signaled 1130 // here. Once the socket is flushed, we'll be able to reuse it (signaled
1131 // by the 'done' future). 1131 // by the 'done' future).
1132 return socket.flush() 1132 return socket.flush()
1133 .then((_) { 1133 .then((_) {
1134 _doneCompleter.complete(socket); 1134 _doneCompleter.complete(socket);
1135 return outbound; 1135 return outbound;
1136 }, onError: (error) { 1136 }, onError: (error, stackTrace) {
1137 _doneCompleter.completeError(error); 1137 _doneCompleter.completeError(error, stackTrace);
1138 if (_ignoreError(error)) { 1138 if (_ignoreError(error)) {
1139 return outbound; 1139 return outbound;
1140 } else { 1140 } else {
1141 throw error; 1141 throw error;
1142 } 1142 }
1143 }); 1143 });
1144 } 1144 }
1145 1145
1146 var future = writeHeaders(); 1146 var future = writeHeaders();
1147 if (future != null) { 1147 if (future != null) {
(...skipping 1091 matching lines...) Expand 10 before | Expand all | Expand 10 after
2239 {Function onError, 2239 {Function onError,
2240 void onDone(), 2240 void onDone(),
2241 bool cancelOnError}) { 2241 bool cancelOnError}) {
2242 _serverSocket.listen( 2242 _serverSocket.listen(
2243 (Socket socket) { 2243 (Socket socket) {
2244 socket.setOption(SocketOption.TCP_NODELAY, true); 2244 socket.setOption(SocketOption.TCP_NODELAY, true);
2245 // Accept the client connection. 2245 // Accept the client connection.
2246 _HttpConnection connection = new _HttpConnection(socket, this); 2246 _HttpConnection connection = new _HttpConnection(socket, this);
2247 _idleConnections.add(connection); 2247 _idleConnections.add(connection);
2248 }, 2248 },
2249 onError: (error) { 2249 onError: (error, stackTrace) {
2250 // Ignore HandshakeExceptions as they are bound to a single request, 2250 // Ignore HandshakeExceptions as they are bound to a single request,
2251 // and are not fatal for the server. 2251 // and are not fatal for the server.
2252 if (error is! HandshakeException) { 2252 if (error is! HandshakeException) {
2253 _controller.addError(error); 2253 _controller.addError(error, stackTrace);
2254 } 2254 }
2255 }, 2255 },
2256 onDone: _controller.close); 2256 onDone: _controller.close);
2257 return _controller.stream.listen(onData, 2257 return _controller.stream.listen(onData,
2258 onError: onError, 2258 onError: onError,
2259 onDone: onDone, 2259 onDone: onDone,
2260 cancelOnError: cancelOnError); 2260 cancelOnError: cancelOnError);
2261 } 2261 }
2262 2262
2263 Future close({bool force: false}) { 2263 Future close({bool force: false}) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2308 } 2308 }
2309 2309
2310 void _handleRequest(_HttpRequest request) { 2310 void _handleRequest(_HttpRequest request) {
2311 if (!closed) { 2311 if (!closed) {
2312 _controller.add(request); 2312 _controller.add(request);
2313 } else { 2313 } else {
2314 request._httpConnection.destroy(); 2314 request._httpConnection.destroy();
2315 } 2315 }
2316 } 2316 }
2317 2317
2318 void _handleError(error) {
2319 if (!closed) _controller.addError(error);
2320 }
2321
2322 void _connectionClosed(_HttpConnection connection) { 2318 void _connectionClosed(_HttpConnection connection) {
2323 // Remove itself from either idle or active connections. 2319 // Remove itself from either idle or active connections.
2324 connection.unlink(); 2320 connection.unlink();
2325 _maybePerformCleanup(); 2321 _maybePerformCleanup();
2326 } 2322 }
2327 2323
2328 void _markIdle(_HttpConnection connection) { 2324 void _markIdle(_HttpConnection connection) {
2329 _activeConnections.remove(connection); 2325 _activeConnections.remove(connection);
2330 _idleConnections.add(connection); 2326 _idleConnections.add(connection);
2331 } 2327 }
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
2816 const _RedirectInfo(this.statusCode, this.method, this.location); 2812 const _RedirectInfo(this.statusCode, this.method, this.location);
2817 } 2813 }
2818 2814
2819 String _getHttpVersion() { 2815 String _getHttpVersion() {
2820 var version = Platform.version; 2816 var version = Platform.version;
2821 // Only include major and minor version numbers. 2817 // Only include major and minor version numbers.
2822 int index = version.indexOf('.', version.indexOf('.') + 1); 2818 int index = version.indexOf('.', version.indexOf('.') + 1);
2823 version = version.substring(0, index); 2819 version = version.substring(0, index);
2824 return 'Dart/$version (dart:io)'; 2820 return 'Dart/$version (dart:io)';
2825 } 2821 }
OLDNEW
« no previous file with comments | « sdk/lib/io/file_impl.dart ('k') | sdk/lib/io/http_parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698