aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>2011-02-17 19:12:45 +0000
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>2011-02-17 19:12:45 +0000
commit8f4208be5d25c6ed5773aa1bb23256764b941a17 (patch)
tree80cf6dd6131c44b6726d7205c1b3609a0929737c
parentd25ba26a9a36065fccd36db82da46d87c2b86ec8 (diff)
downloadxen-8f4208be5d25c6ed5773aa1bb23256764b941a17.tar.gz
xen-8f4208be5d25c6ed5773aa1bb23256764b941a17.tar.bz2
xen-8f4208be5d25c6ed5773aa1bb23256764b941a17.zip
xl daemon: fix some memory leaks
If we are watching multiple disks we have to free multiple waiters. Free the event before continuing the loop. Destroy the disk device returned by libxl_event_get_disk_eject_info. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/xl_cmdimpl.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 0f980d99d5..32306de1c0 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1334,7 +1334,7 @@ static int create_domain(struct domain_create *dom_info)
const char *restore_file = dom_info->restore_file;
int migrate_fd = dom_info->migrate_fd;
- int fd;
+ int fd, i;
int need_daemon = 1;
int ret, rc;
libxl_waiter *w1 = NULL, *w2 = NULL;
@@ -1603,7 +1603,10 @@ start:
case LIBXL_EVENT_DOMAIN_DEATH:
ret = libxl_event_get_domain_death_info(&ctx, domid, &event, &info);
- if (ret < 0) continue;
+ if (ret < 0) {
+ libxl_free_event(&event);
+ continue;
+ }
LOG("Domain %d is dead", domid);
@@ -1619,7 +1622,8 @@ start:
/* Otherwise fall through and restart. */
case 1:
- libxl_free_waiter(w1);
+ for (i = 0; i < d_config.num_disks; i++)
+ libxl_free_waiter(&w1[i]);
libxl_free_waiter(w2);
free(w1);
free(w2);
@@ -1655,8 +1659,10 @@ start:
}
break;
case LIBXL_EVENT_DISK_EJECT:
- if (libxl_event_get_disk_eject_info(&ctx, domid, &event, &disk))
+ if (libxl_event_get_disk_eject_info(&ctx, domid, &event, &disk)) {
libxl_cdrom_insert(&ctx, domid, &disk);
+ libxl_device_disk_destroy(&disk);
+ }
break;
}
libxl_free_event(&event);