diff --git a/tools/acrn-manager/acrn_vm_ops.c b/tools/acrn-manager/acrn_vm_ops.c index 97230bc60..602b19d3f 100644 --- a/tools/acrn-manager/acrn_vm_ops.c +++ b/tools/acrn-manager/acrn_vm_ops.c @@ -171,19 +171,19 @@ static void _scan_alive_vm(void) if (ret < 0) /* unsupport query */ - vm->state = VM_STARTED; + vm->state_tmp = VM_STARTED; else switch (ret) { case VM_SUSPEND_NONE: - vm->state = VM_STARTED; + vm->state_tmp = VM_STARTED; break; case VM_SUSPEND_SUSPEND: - vm->state = VM_SUSPENDED; + vm->state_tmp = VM_SUSPENDED; break; default: fprintf(stderr, "Warnning: unknow vm state:0x%lx\n", vm->state); - vm->state = VM_STATE_UNKNOWN; + vm->state_tmp = VM_STATE_UNKNOWN; } vm->update = update_count; } @@ -271,7 +271,7 @@ static void _scan_added_vm(void) LIST_INSERT_HEAD(&vmmngr_head, vm, list); } - vm->state = VM_CREATED; + vm->state_tmp = VM_CREATED; vm->update = update_count; } @@ -283,8 +283,10 @@ static void _remove_dead_vm(void) struct vmmngr_struct *vm, *tvm; list_foreach_safe(vm, &vmmngr_head, list, tvm) { - if (vm->update == update_count) + if (vm->update == update_count) { + vm->state = vm->state_tmp; continue; + } LIST_REMOVE(vm, list); printf("%s: Removed dead %s\n", __func__, vm->name); free(vm); diff --git a/tools/acrn-manager/acrnctl.h b/tools/acrn-manager/acrnctl.h index bc05a09a2..59547b646 100644 --- a/tools/acrn-manager/acrnctl.h +++ b/tools/acrn-manager/acrnctl.h @@ -38,6 +38,7 @@ struct vmmngr_struct *vmmngr_find(const char *vmname); struct vmmngr_struct { char name[MAX_NAME_LEN]; unsigned long state; + unsigned long state_tmp; unsigned long update; /* update count, remove a vm if no update for it */ LIST_ENTRY(vmmngr_struct) list; };