Skip to content

Commit 3000edc

Browse files
KaigeFulijinxia
authored andcommitted
tools: acrnctl: Free vmmngr list after vm ops done
vmmngr_struct entry is allocated in get_vm_list. we should free it after vm ops done. Signed-off-by: Kaige Fu <kaige.fu@intel.com> Reviewed-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com> Reviewed-by: Yan, Like <like.yan@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
1 parent 2da5e7c commit 3000edc

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

tools/acrn-manager/acrn_vm_ops.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,17 @@ void get_vm_list(void)
9393
}
9494
}
9595

96+
void put_vm_list(void)
97+
{
98+
struct vmmngr_struct *s;
99+
100+
while (!LIST_EMPTY(&vmmngr_head)) {
101+
s = LIST_FIRST(&vmmngr_head);
102+
LIST_REMOVE(s, list);
103+
free(s);
104+
}
105+
}
106+
96107
/* helper functions */
97108
int shell_cmd(const char *cmd, char *outbuf, int len)
98109
{

tools/acrn-manager/acrnctl.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ struct acrnctl_cmd {
4545
/* command: list */
4646
static int acrnctl_do_list(int argc, char *argv[])
4747
{
48-
get_vm_list();
4948
return list_vm();
5049
}
5150

@@ -265,7 +264,6 @@ static int acrnctl_do_add(int argc, char *argv[])
265264
snprintf(cmd, sizeof(cmd), "mkdir -p %s/add", ACRNCTL_OPT_ROOT);
266265
system(cmd);
267266

268-
get_vm_list();
269267
s = vmmngr_find(vmname);
270268
if (s) {
271269
printf("%s(%s) already exist, can't add %s%s\n",
@@ -313,7 +311,6 @@ static int acrnctl_do_stop(int argc, char *argv[])
313311
struct vmmngr_struct *s;
314312
int i;
315313

316-
get_vm_list();
317314
for (i = 1; i < argc; i++) {
318315
s = vmmngr_find(argv[i]);
319316
if (!s) {
@@ -338,7 +335,6 @@ static int acrnctl_do_del(int argc, char *argv[])
338335
int i;
339336
char cmd[128];
340337

341-
get_vm_list();
342338
for (i = 1; i < argc; i++) {
343339
s = vmmngr_find(argv[i]);
344340
if (!s) {
@@ -365,7 +361,6 @@ static int acrnctl_do_start(int argc, char *argv[])
365361
{
366362
struct vmmngr_struct *s;
367363

368-
get_vm_list();
369364
s = vmmngr_find(argv[1]);
370365
if (!s) {
371366
printf("can't find %s\n", argv[1]);
@@ -451,7 +446,7 @@ static void usage(void)
451446

452447
int main(int argc, char *argv[])
453448
{
454-
int i;
449+
int i, err;
455450

456451
if (argc == 1 || !strcmp(argv[1], "help")) {
457452
usage();
@@ -471,7 +466,11 @@ int main(int argc, char *argv[])
471466
if (acmds[i].valid_args(&acmds[i], argc - 1, &argv[1])) {
472467
return -1;
473468
} else {
474-
return acmds[i].func(argc - 1, &argv[1]);
469+
get_vm_list();
470+
err = acmds[i].func(argc - 1, &argv[1]);
471+
put_vm_list();
472+
473+
return err;
475474
}
476475
}
477476

tools/acrn-manager/acrnctl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ static const char *state_str[] = {
3434
*/
3535
void get_vm_list(void);
3636

37+
/**
38+
* @brief free all vmmngr_struct allocated by get_vm_list
39+
*/
40+
void put_vm_list(void);
41+
3742
/**
3843
* @brief search vm indentified by vm from vmmngr_head
3944
*

0 commit comments

Comments
 (0)