Commit 3871b0eb authored by John McCutchan's avatar John McCutchan Committed by GitHub

Merge pull request #4998 from johnmccutchan/hot_catch_reload_failures

Fix hot reload failure handling
parents 7beedd7a f6de2fbf
......@@ -211,7 +211,7 @@ ZipEntry _obtainLicenses(
// splitting each one into each component license (so that we can
// de-dupe if possible).
final Set<String> packageLicenses = new Set<String>();
final List<Uri> packages = packageMap.map.values;
final Iterable<Uri> packages = packageMap.map.values;
for (Uri package in packages) {
if (package != null && package.scheme == 'file') {
final File file = new File.fromUri(package.resolve('../LICENSE'));
......
......@@ -114,17 +114,13 @@ class Observatory {
});
}
Future<Response> reloadSources(String isolateId) async {
Completer<Event> whenIsolateReloads = new Completer<Event>();
StreamSubscription<Event> sub = onIsolateEvent
.where((Event event) => event.kind == 'IsolateReload')
.listen((Event event) => whenIsolateReloads.complete(event));
Future<Null> reloadSources(String isolateId) async {
try {
await sendRequest('_reloadSources', <String, dynamic>{ 'isolateId': isolateId });
return await whenIsolateReloads.future.timeout(new Duration(seconds: 20));
} finally {
await sub.cancel();
await sendRequest('_reloadSources',
<String, dynamic>{ 'isolateId': isolateId });
return null;
} catch (e) {
return new Future<Null>.error(e.data['details']);
}
}
......
......@@ -378,13 +378,14 @@ class RunAndStayResident {
await _updateDevFS();
}
Status reloadStatus = logger.startProgress('Performing hot reload');
Event result = await observatory.reloadSources(observatory.firstIsolateId);
reloadStatus.stop(showElapsedTime: true);
dynamic error = result.response['reloadError'];
if (error != null) {
printError('Error reloading application sources: $error');
try {
await observatory.reloadSources(observatory.firstIsolateId);
} catch (errorMessage) {
reloadStatus.stop(showElapsedTime: true);
printError('Hot reload was rejected:\n$errorMessage');
return false;
}
reloadStatus.stop(showElapsedTime: true);
Status reassembleStatus =
logger.startProgress('Reassembling application');
await observatory.flutterReassemble(observatory.firstIsolateId);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment