Skip to content

Commit 05b8e71

Browse files
authored
shut down the daemon if it fails to start up fully (#278)
1 parent 93c64e7 commit 05b8e71

File tree

1 file changed

+31
-22
lines changed

1 file changed

+31
-22
lines changed

webdev/lib/src/command/daemon_command.dart

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'dart:convert';
77
import 'dart:io';
88

99
import 'package:args/command_runner.dart';
10+
import 'package:pedantic/pedantic.dart';
1011

1112
import '../daemon/app_domain.dart';
1213
import '../daemon/daemon.dart';
@@ -49,27 +50,35 @@ class DaemonCommand extends Command<int> {
4950

5051
@override
5152
Future<int> run() async {
52-
var daemon = Daemon(_stdinCommandStream, _stdoutCommandResponse);
53-
var daemonDomain = DaemonDomain(daemon);
54-
setLogHandler((level, message, {verbose}) {
55-
daemonDomain.sendEvent(
56-
'daemon.logMessage', {'level': '$level', 'message': message});
57-
});
58-
daemon.registerDomain(daemonDomain);
59-
var configuration =
60-
Configuration(launchInChrome: true, debug: true, autoRun: false);
61-
var pubspecLock = await readPubspecLock(configuration);
62-
var buildOptions =
63-
buildRunnerArgs(pubspecLock, configuration, includeOutput: false);
64-
var port = await findUnusedPort();
65-
var workflow = await DevWorkflow.start(
66-
configuration,
67-
buildOptions,
68-
{'web': port},
69-
);
70-
daemon.registerDomain(AppDomain(daemon, workflow.serverManager));
71-
await daemon.onExit;
72-
await workflow.shutDown();
73-
return 0;
53+
Daemon daemon;
54+
DevWorkflow workflow;
55+
try {
56+
daemon = Daemon(_stdinCommandStream, _stdoutCommandResponse);
57+
var daemonDomain = DaemonDomain(daemon);
58+
setLogHandler((level, message, {verbose}) {
59+
daemonDomain.sendEvent(
60+
'daemon.logMessage', {'level': '$level', 'message': message});
61+
});
62+
daemon.registerDomain(daemonDomain);
63+
var configuration =
64+
Configuration(launchInChrome: true, debug: true, autoRun: false);
65+
var pubspecLock = await readPubspecLock(configuration);
66+
var buildOptions =
67+
buildRunnerArgs(pubspecLock, configuration, includeOutput: false);
68+
var port = await findUnusedPort();
69+
workflow = await DevWorkflow.start(
70+
configuration,
71+
buildOptions,
72+
{'web': port},
73+
);
74+
daemon.registerDomain(AppDomain(daemon, workflow.serverManager));
75+
await daemon.onExit;
76+
return 0;
77+
} catch (e) {
78+
daemon?.shutdown();
79+
rethrow;
80+
} finally {
81+
unawaited(workflow?.shutDown());
82+
}
7483
}
7584
}

0 commit comments

Comments
 (0)