Revert "libvmclient: Take VmCallback in VmInstance::start()"

Revert submission 3408863

Reason for revert: Likely culprit for b/391356639  - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.

Reverted changes: /q/submissionid:3408863

Change-Id: Id9436b9557e0fd4cbc94df9f22ba35132619aa91
diff --git a/libs/libvmclient/src/lib.rs b/libs/libvmclient/src/lib.rs
index 2c6abb5..8dd3cd3 100644
--- a/libs/libvmclient/src/lib.rs
+++ b/libs/libvmclient/src/lib.rs
@@ -209,6 +209,7 @@
         console_in: Option<File>,
         log: Option<File>,
         dump_dt: Option<File>,
+        callback: Option<Box<dyn VmCallback + Send + Sync>>,
     ) -> BinderResult<Self> {
         let console_out = console_out.map(ParcelFileDescriptor::new);
         let console_in = console_in.map(ParcelFileDescriptor::new);
@@ -225,19 +226,20 @@
 
         let cid = vm.getCid()?;
 
+        // Register callback before starting VM, in case it dies immediately.
         let state = Arc::new(Monitor::new(VmState::default()));
+        let callback = BnVirtualMachineCallback::new_binder(
+            VirtualMachineCallback { state: state.clone(), client_callback: callback },
+            BinderFeatures::default(),
+        );
+        vm.registerCallback(&callback)?;
         let death_recipient = wait_for_binder_death(&mut vm.as_binder(), state.clone())?;
 
         Ok(Self { vm, cid, state, _death_recipient: death_recipient })
     }
 
     /// Starts the VM.
-    pub fn start(&self, callback: Option<Box<dyn VmCallback + Send + Sync>>) -> BinderResult<()> {
-        let callback = BnVirtualMachineCallback::new_binder(
-            VirtualMachineCallback { state: self.state.clone(), client_callback: callback },
-            BinderFeatures::default(),
-        );
-        self.vm.registerCallback(&callback)?;
+    pub fn start(&self) -> BinderResult<()> {
         self.vm.start()
     }