Skip to content

Commit efe8737

Browse files
Shut down DevTools and DDS processes if flutter_tools is killed by a signal (#159238)
See flutter/flutter#159154
1 parent c7dd641 commit efe8737

4 files changed

Lines changed: 14 additions & 6 deletions

File tree

packages/flutter_tools/lib/src/resident_devtools_handler.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ class FlutterResidentDevtoolsHandler implements ResidentDevtoolsHandler {
6969
final ResidentRunner _residentRunner;
7070
final Logger _logger;
7171
bool _shutdown = false;
72-
bool _served = false;
7372

7473
@visibleForTesting
7574
bool launchedInBrowser = false;
@@ -105,7 +104,6 @@ class FlutterResidentDevtoolsHandler implements ResidentDevtoolsHandler {
105104
_devToolsLauncher.devToolsUrl = devToolsServerAddress;
106105
} else {
107106
await _devToolsLauncher.serve();
108-
_served = true;
109107
}
110108
await _devToolsLauncher.ready;
111109
// Do not attempt to print debugger list if the connection has failed or if we're shutting down.
@@ -305,7 +303,7 @@ class FlutterResidentDevtoolsHandler implements ResidentDevtoolsHandler {
305303
@override
306304
Future<void> shutdown() async {
307305
_shutdown = true;
308-
if (_devToolsLauncher == null || !_served) {
306+
if (_devToolsLauncher == null) {
309307
return;
310308
}
311309
_readyToAnnounce = false;

packages/flutter_tools/lib/src/run_hot.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,8 +1248,10 @@ class HotRunner extends ResidentRunner {
12481248

12491249
@override
12501250
Future<void> cleanupAfterSignal() async {
1251+
await residentDevtoolsHandler!.shutdown();
12511252
await stopEchoingDeviceLog();
12521253
await hotRunnerConfig!.runPreShutdownOperations();
1254+
shutdownDartDevelopmentService();
12531255
if (stopAppDuringCleanup) {
12541256
return exitApp();
12551257
}

packages/flutter_tools/test/general.shard/hot_shared.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class FakeDevice extends Fake implements Device {
5454
bool disposed = false;
5555

5656
@override
57-
final DartDevelopmentService dds = _FakeDartDevelopmentService();
57+
final DartDevelopmentService dds = FakeDartDevelopmentService();
5858

5959
@override
6060
bool isSupported() => true;
@@ -94,9 +94,13 @@ class FakeDevice extends Fake implements Device {
9494
}
9595
}
9696

97-
class _FakeDartDevelopmentService extends Fake implements DartDevelopmentService {
97+
class FakeDartDevelopmentService extends Fake implements DartDevelopmentService {
98+
bool wasShutdown = false;
99+
98100
@override
99-
void shutdown() {}
101+
void shutdown() {
102+
wasShutdown = true;
103+
}
100104
}
101105

102106
class FakeFlutterDevice extends Fake implements FlutterDevice {

packages/flutter_tools/test/general.shard/run_hot_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:flutter_tools/src/compile.dart';
99
import 'package:flutter_tools/src/devfs.dart';
1010
import 'package:flutter_tools/src/device.dart';
1111
import 'package:flutter_tools/src/reporting/reporting.dart';
12+
import 'package:flutter_tools/src/resident_devtools_handler.dart';
1213
import 'package:flutter_tools/src/resident_runner.dart';
1314
import 'package:flutter_tools/src/run_hot.dart';
1415
import 'package:flutter_tools/src/vmservice.dart';
@@ -56,11 +57,14 @@ void main() {
5657
target: 'main.dart',
5758
debuggingOptions: DebuggingOptions.disabled(BuildInfo.debug),
5859
analytics: _FakeAnalytics(),
60+
devtoolsHandler: createNoOpHandler,
5961
);
6062

6163
await runner.run();
6264
await runner.cleanupAfterSignal();
6365
expect(flutterDevice.wasExited, true);
66+
expect((flutterDevice.device.dds as FakeDartDevelopmentService).wasShutdown, true);
67+
expect((runner.residentDevtoolsHandler! as NoOpDevtoolsHandler).wasShutdown, true);
6468
},
6569
overrides: <Type, Generator>{
6670
FileSystem: () => fileSystem,

0 commit comments

Comments
 (0)