microdroid_manager waits for task to exit
If microdroid_manager doesn't do the wait, the child process which might
not have run to completion is force killed by init, because
microdroid_manager is registered as a oneshot service.
Bug: N/A
Test: atest MicrodroidHostTestCases
Change-Id: I5748fbbb233182f0d8ca885bd94c7d15149aae82
diff --git a/microdroid_manager/src/main.rs b/microdroid_manager/src/main.rs
index ae72a59..b71daa8 100644
--- a/microdroid_manager/src/main.rs
+++ b/microdroid_manager/src/main.rs
@@ -57,8 +57,15 @@
fn exec_task(task: &Task) -> Result<()> {
info!("executing main task {:?}...", task);
- build_command(task)?.spawn()?;
- Ok(())
+ let exit_status = build_command(task)?.spawn()?.wait()?;
+ if exit_status.success() {
+ Ok(())
+ } else {
+ match exit_status.code() {
+ Some(code) => bail!("task exited with exit code: {}", code),
+ None => bail!("task terminated by signal"),
+ }
+ }
}
fn build_command(task: &Task) -> Result<Command> {