In "vmctl status", VMs that are being stopped but are still running
will simply show up as "running".

The diff below gives preference to showing the stopping state akin to
how a paused VM is handled.

Index: usr.sbin/vmctl/vmctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/vmctl/vmctl.c,v
retrieving revision 1.76
diff -u -p -u -p -r1.76 vmctl.c
--- usr.sbin/vmctl/vmctl.c      27 Jan 2021 07:21:12 -0000      1.76
+++ usr.sbin/vmctl/vmctl.c      7 Mar 2021 15:39:03 -0000
@@ -708,7 +708,7 @@ add_info(struct imsg *imsg, int *ret)
  *
  * Returns a string representing the current VM state, note that the order
  * matters. A paused VM does have the VM_STATE_RUNNING bit set, but
- * VM_STATE_PAUSED is more significant to report.
+ * VM_STATE_PAUSED is more significant to report. Same goes for stopping VMs.
  *
  * Parameters
  *  vm_state: mask indicating the vm state
@@ -720,10 +720,10 @@ vm_state(unsigned int mask)
                return "paused";
        else if (mask & VM_STATE_WAITING)
                return "waiting";
-       else if (mask & VM_STATE_RUNNING)
-               return "running";
        else if (mask & VM_STATE_SHUTDOWN)
                return "stopping";
+       else if (mask & VM_STATE_RUNNING)
+               return "running";
        /* Presence of absence of other flags */
        else if (!mask || (mask & VM_STATE_DISABLED))
                return "stopped";

Reply via email to