Fix hot restart when application is being debugged (#9450)
- [x] Resume the isolate before performing a hot restart.
Fixes #8923
diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart
index fd353d2..fc79f4f 100644
--- a/packages/flutter_tools/lib/src/run_hot.dart
+++ b/packages/flutter_tools/lib/src/run_hot.dart
@@ -329,6 +329,18 @@
final bool updatedDevFS = await _updateDevFS();
if (!updatedDevFS)
return new OperationResult(1, 'DevFS Synchronization Failed');
+ // Check if the isolate is paused and resume it.
+ if (currentView?.uiIsolate != null) {
+ // Reload the isolate.
+ await currentView.uiIsolate.reload();
+ final ServiceEvent pauseEvent = currentView.uiIsolate.pauseEvent;
+ if ((pauseEvent != null) && pauseEvent.isPauseEvent) {
+ // Resume the isolate so that it can be killed by the embedder.
+ await currentView.uiIsolate.resume();
+ }
+ }
+ // We are now running from source.
+ _runningFromSnapshot = false;
await _launchFromDevFS(package, mainPath);
restartTimer.stop();
printTrace('Restart performed in '
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index 9bf6c05..58d3aa7 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -941,6 +941,12 @@
}
}
+ /// Resumes the isolate.
+ Future<Map<String, dynamic>> resume() {
+ return invokeRpcRaw('resume');
+ }
+
+
// Flutter extension methods.
// Invoke a flutter extension method, if the flutter extension is not