in lib/utils.dart [49:81]
Future<void> terminateRequestFuture() {
final completer = Completer<bool>.sync();
// sigIntSub is copied below to avoid a race condition - ignoring this lint
// ignore: cancel_subscriptions
StreamSubscription<ProcessSignal>? sigIntSub, sigTermSub;
Future<void> signalHandler(ProcessSignal signal) async {
print('Received signal $signal - closing');
final subCopy = sigIntSub;
if (subCopy != null) {
sigIntSub = null;
await subCopy.cancel();
sigIntSub = null;
if (sigTermSub != null) {
await sigTermSub!.cancel();
sigTermSub = null;
}
completer.complete(true);
}
}
sigIntSub = ProcessSignal.sigint.watch().listen(signalHandler);
// SIGTERM is not supported on Windows. Attempting to register a SIGTERM
// handler raises an exception.
if (!Platform.isWindows) {
sigTermSub = ProcessSignal.sigterm.watch().listen(signalHandler);
}
return completer.future;
}