Shutdown VM once payload finishes

Bug: 236588647
Test: atest MicrodroidTests MicrodroidHostTestCases
Change-Id: I1d9b7bd1fd23048c28f1fb554e5ded1771f666d5
diff --git a/microdroid_manager/Android.bp b/microdroid_manager/Android.bp
index 8343691..d1afc14 100644
--- a/microdroid_manager/Android.bp
+++ b/microdroid_manager/Android.bp
@@ -34,6 +34,7 @@
         "libopenssl",
         "libprotobuf",
         "librustutils",
+        "libscopeguard",
         "libserde",
         "libserde_cbor",
         "libserde_json",
diff --git a/microdroid_manager/src/main.rs b/microdroid_manager/src/main.rs
index 998b94b..15d6663 100644
--- a/microdroid_manager/src/main.rs
+++ b/microdroid_manager/src/main.rs
@@ -155,17 +155,21 @@
     }
 }
 
-fn main() {
-    if let Err(e) = try_main() {
-        error!("Failed with {:?}. Shutting down...", e);
-        if let Err(e) = write_death_reason_to_serial(&e) {
-            error!("Failed to write death reason {:?}", e);
-        }
+fn main() -> Result<()> {
+    scopeguard::defer! {
+        info!("Shutting down...");
         if let Err(e) = system_properties::write("sys.powerctl", "shutdown") {
             error!("failed to shutdown {:?}", e);
         }
-        std::process::exit(1);
     }
+
+    try_main().map_err(|e| {
+        error!("Failed with {:?}.", e);
+        if let Err(e) = write_death_reason_to_serial(&e) {
+            error!("Failed to write death reason {:?}", e);
+        }
+        e
+    })
 }
 
 fn try_main() -> Result<()> {