diff --git a/tools/acrn-manager/acrn_vm_ops.c b/tools/acrn-manager/acrn_vm_ops.c index 68403b850..6926d2ccb 100644 --- a/tools/acrn-manager/acrn_vm_ops.c +++ b/tools/acrn-manager/acrn_vm_ops.c @@ -93,6 +93,17 @@ void get_vm_list(void) } } +void put_vm_list(void) +{ + struct vmmngr_struct *s; + + while (!LIST_EMPTY(&vmmngr_head)) { + s = LIST_FIRST(&vmmngr_head); + LIST_REMOVE(s, list); + free(s); + } +} + /* helper functions */ int shell_cmd(const char *cmd, char *outbuf, int len) { diff --git a/tools/acrn-manager/acrnctl.c b/tools/acrn-manager/acrnctl.c index 01d203e33..e925e7d52 100644 --- a/tools/acrn-manager/acrnctl.c +++ b/tools/acrn-manager/acrnctl.c @@ -45,7 +45,6 @@ struct acrnctl_cmd { /* command: list */ static int acrnctl_do_list(int argc, char *argv[]) { - get_vm_list(); return list_vm(); } @@ -265,7 +264,6 @@ static int acrnctl_do_add(int argc, char *argv[]) snprintf(cmd, sizeof(cmd), "mkdir -p %s/add", ACRNCTL_OPT_ROOT); system(cmd); - get_vm_list(); s = vmmngr_find(vmname); if (s) { printf("%s(%s) already exist, can't add %s%s\n", @@ -313,7 +311,6 @@ static int acrnctl_do_stop(int argc, char *argv[]) struct vmmngr_struct *s; int i; - get_vm_list(); for (i = 1; i < argc; i++) { s = vmmngr_find(argv[i]); if (!s) { @@ -338,7 +335,6 @@ static int acrnctl_do_del(int argc, char *argv[]) int i; char cmd[128]; - get_vm_list(); for (i = 1; i < argc; i++) { s = vmmngr_find(argv[i]); if (!s) { @@ -365,7 +361,6 @@ static int acrnctl_do_start(int argc, char *argv[]) { struct vmmngr_struct *s; - get_vm_list(); s = vmmngr_find(argv[1]); if (!s) { printf("can't find %s\n", argv[1]); @@ -451,7 +446,7 @@ static void usage(void) int main(int argc, char *argv[]) { - int i; + int i, err; if (argc == 1 || !strcmp(argv[1], "help")) { usage(); @@ -471,7 +466,11 @@ int main(int argc, char *argv[]) if (acmds[i].valid_args(&acmds[i], argc - 1, &argv[1])) { return -1; } else { - return acmds[i].func(argc - 1, &argv[1]); + get_vm_list(); + err = acmds[i].func(argc - 1, &argv[1]); + put_vm_list(); + + return err; } } diff --git a/tools/acrn-manager/acrnctl.h b/tools/acrn-manager/acrnctl.h index df117d64a..733e4e0d3 100644 --- a/tools/acrn-manager/acrnctl.h +++ b/tools/acrn-manager/acrnctl.h @@ -34,6 +34,11 @@ static const char *state_str[] = { */ void get_vm_list(void); +/** + * @brief free all vmmngr_struct allocated by get_vm_list + */ +void put_vm_list(void); + /** * @brief search vm indentified by vm from vmmngr_head *