Make sure tombstone is transmitted before VM exit

This change makes tombstone_transmit more robust by doing:
1) running tombstone_transmit *after* mounting APEXes, because
   tombstone_transmit isn't a bootstrap binary.
2) marking tombstone_transmit as shutdown critical, for init to wait
   tombstone_transmit upon shutdown.
3) stopping tombstoned, in case export_tombstones is false.

Bug: 236588647
Test: atest MicrodroidTests MicrodroidHostTestCases
Change-Id: I53f93ed384bdc0e558e0d899a0c9e7b01623a933
diff --git a/microdroid/init.rc b/microdroid/init.rc
index be08bbd..b0e5e46 100644
--- a/microdroid/init.rc
+++ b/microdroid/init.rc
@@ -179,6 +179,7 @@
 service tombstone_transmit /system/bin/tombstone_transmit.microdroid -cid 2 -port 2000 -remove_tombstones_after_transmitting
     user root
     group system
+    shutdown critical
 
 service apexd-vm /system/bin/apexd --vm
     user root
diff --git a/microdroid_manager/src/main.rs b/microdroid_manager/src/main.rs
index ae26787..e4694e8 100644
--- a/microdroid_manager/src/main.rs
+++ b/microdroid_manager/src/main.rs
@@ -314,12 +314,6 @@
 
     let config = load_config(Path::new(&metadata.payload_config_path))?;
 
-    // Start tombstone_transmit if enabled
-    if config.export_tombstones {
-        system_properties::write("ctl.start", "tombstone_transmit")
-            .context("Failed to start tombstone_transmit")?;
-    }
-
     if config.extra_apks.len() != verified_data.extra_apks_data.len() {
         return Err(anyhow!(
             "config expects {} extra apks, but found only {}",
@@ -333,6 +327,14 @@
     // TODO(jooyung): wait until sys.boot_completed?
     wait_for_apex_config_done()?;
 
+    // Start tombstone_transmit if enabled
+    if config.export_tombstones {
+        system_properties::write("ctl.start", "tombstone_transmit")
+            .context("Failed to start tombstone_transmit")?;
+    } else {
+        system_properties::write("ctl.stop", "tombstoned").context("Failed to stop tombstoned")?;
+    }
+
     ensure!(
         config.task.is_some(),
         MicrodroidError::InvalidConfig("No task in VM config".to_string())