Do not continue a hot restart if _restartFromSources fails (#22645)

diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart
index 35d5f92..2f68bb5 100644
--- a/packages/flutter_tools/lib/src/run_hot.dart
+++ b/packages/flutter_tools/lib/src/run_hot.dart
@@ -502,7 +502,9 @@
       try {
         if (!(await hotRunnerConfig.setupHotRestart()))
           return OperationResult(1, 'setupHotRestart failed');
-        await _restartFromSources();
+        final OperationResult result = await _restartFromSources();
+        if (!result.isOk)
+          return result;
       } finally {
         status.cancel();
       }
diff --git a/packages/flutter_tools/test/hot_test.dart b/packages/flutter_tools/test/hot_test.dart
index 0094422..4ee6ec4 100644
--- a/packages/flutter_tools/test/hot_test.dart
+++ b/packages/flutter_tools/test/hot_test.dart
@@ -103,14 +103,16 @@
 
     testUsingContext('no setup', () async {
       final List<FlutterDevice> devices = <FlutterDevice>[FlutterDevice(MockDevice(), generator: residentCompiler, trackWidgetCreation: false)];
-      expect((await HotRunner(devices).restart(fullRestart: true)).isOk, true);
+      expect((await HotRunner(devices).restart(fullRestart: true)).isOk, false);
     }, overrides: <Type, Generator>{
       Artifacts: () => mockArtifacts,
     });
 
     testUsingContext('setup function succeeds', () async {
       final List<FlutterDevice> devices = <FlutterDevice>[FlutterDevice(MockDevice(), generator: residentCompiler, trackWidgetCreation: false)];
-      expect((await HotRunner(devices).restart(fullRestart: true)).isOk, true);
+      final OperationResult result = await HotRunner(devices).restart(fullRestart: true);
+      expect(result.isOk, false);
+      expect(result.message, isNot('setupHotRestart failed'));
     }, overrides: <Type, Generator>{
       Artifacts: () => mockArtifacts,
       HotRunnerConfig: () => TestHotRunnerConfig(successfulSetup: true),
@@ -118,7 +120,9 @@
 
     testUsingContext('setup function fails', () async {
       final List<FlutterDevice> devices = <FlutterDevice>[FlutterDevice(MockDevice(), generator: residentCompiler, trackWidgetCreation: false)];
-      expect((await HotRunner(devices).restart(fullRestart: true)).isOk, false);
+      final OperationResult result = await HotRunner(devices).restart(fullRestart: true);
+      expect(result.isOk, false);
+      expect(result.message, 'setupHotRestart failed');
     }, overrides: <Type, Generator>{
       Artifacts: () => mockArtifacts,
       HotRunnerConfig: () => TestHotRunnerConfig(successfulSetup: false),