handle dead process

This commit is contained in:
fuwa
2019-11-17 22:41:29 +08:00
parent 141237f4dc
commit 10f37cf6fd
2 changed files with 15 additions and 5 deletions
+13 -3
View File
@@ -30,7 +30,14 @@ import '../helper.dart';
import '../../config.dart' as config;
import '../../logging.dart';
Stream<String> runBinary (final String name, {final Stream<String> input}) async* {
typedef IsExitingFunc = bool Function();
Stream<String> runBinary
(
final String name,
final IsExitingFunc isExiting,
{final Stream<String> input}
) async* {
final newPath = await getBinaryPath(name);
final appDocDir = await getApplicationDocumentsDirectory();
@@ -78,7 +85,10 @@ Stream<String> runBinary (final String name, {final Stream<String> input}) async
if (config.isEmu) return;
// the app should never reach here
if (!isExiting()) {
log.warning('process is ded');
exit(1);
}
log.info('Daemon exited gracefully.');
// exit(0);
}
+2 -2
View File
@@ -130,7 +130,7 @@ class _CyberWOW_PageState extends State<CyberWOW_Page> with WidgetsBindingObserv
SyncingState _syncingState = await _loadingState.next(loading, '');
final syncing = process
.runBinary(binName, input: inputStreamController.stream)
.runBinary(binName, _isExiting, input: inputStreamController.stream)
.asBroadcastStream();
HookedState _syncedNextState = await _syncingState.next(inputStreamController.sink, syncing);
@@ -195,7 +195,7 @@ class _CyberWOW_PageState extends State<CyberWOW_Page> with WidgetsBindingObserv
_exiting = true;
inputStreamController.sink.add('exit');
await Future.delayed(const Duration(seconds: 10), () => null);
await Future.delayed(const Duration(seconds: 5), () => null);
// the process controller should call exit(0) for us
log.warning('Daemon took too long to shut down!');