ret = xc_domain_getinfolist(ctx->xch, 0, 1024, info);
if (ret<0) {
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "geting domain info list");
+ free(ptr);
return NULL;
}
}
if (ret==0 || xcinfo.domain != domid) return ERROR_INVAL;
- xcinfo2xlinfo(&xcinfo, info_r);
+ if (info_r)
+ xcinfo2xlinfo(&xcinfo, info_r);
return 0;
}
int libxl_domain_destroy(libxl_ctx *ctx, uint32_t domid)
{
GC_INIT(ctx);
- libxl_dominfo dominfo;
char *dom_path;
char *vm_path;
char *pid;
int rc, dm_present;
- rc = libxl_domain_info(ctx, &dominfo, domid);
+ rc = libxl_domain_info(ctx, NULL, domid);
switch(rc) {
case 0:
break;
* guests using pygrub. */
int libxl_primary_console_exec(libxl_ctx *ctx, uint32_t domid_vm);
+/* May be called with info_r == NULL to check for domain's existance */
int libxl_domain_info(libxl_ctx*, libxl_dominfo *info_r,
uint32_t domid);
libxl_dominfo * libxl_list_domain(libxl_ctx*, int *nb_domain);
+void libxl_dominfo_list_free(libxl_dominfo *list, int nr);
libxl_cpupoolinfo * libxl_list_cpupool(libxl_ctx*, int *nb_pool);
libxl_vminfo * libxl_list_vm(libxl_ctx *ctx, int *nb_vm);
+void libxl_vminfo_list_free(libxl_vminfo *list, int nr);
/*
* Devices
("vcpu_max_id", uint32),
("vcpu_online", uint32),
("cpupool", uint32),
- ], dispose_fn=None)
+ ])
libxl_cpupoolinfo = Struct("cpupoolinfo", [
("poolid", uint32),
libxl_vminfo = Struct("vminfo", [
("uuid", libxl_uuid),
("domid", libxl_domid),
- ], dispose_fn=None)
+ ])
libxl_version_info = Struct("version_info", [
("xen_version_major", integer),
("cap_hvm", bool),
("cap_hvm_directio", bool),
- ], dispose_fn=None, dir=DIR_OUT)
+ ], dir=DIR_OUT)
libxl_cputopology = Struct("cputopology", [
("core", uint32),
libxl_sched_credit_domain = Struct("sched_credit_domain", [
("weight", integer),
("cap", integer),
- ], dispose_fn=None)
+ ])
libxl_sched_credit2_domain = Struct("sched_credit2_domain", [
("weight", integer),
- ], dispose_fn=None)
+ ])
libxl_sched_sedf_domain = Struct("sched_sedf_domain", [
("period", integer),
("latency", integer),
("extratime", integer),
("weight", integer),
- ], dispose_fn=None)
+ ])
libxl_event_type = Enumeration("event_type", [
(1, "DOMAIN_SHUTDOWN"),
free(list);
}
+void libxl_dominfo_list_free(libxl_dominfo *list, int nr)
+{
+ int i;
+ for (i = 0; i < nr; i++)
+ libxl_dominfo_dispose(&list[i]);
+ free(list);
+}
+
+void libxl_vminfo_list_free(libxl_vminfo *list, int nr)
+{
+ int i;
+ for (i = 0; i < nr; i++)
+ libxl_vminfo_dispose(&list[i]);
+ free(list);
+}
+
int libxl_domid_valid_guest(uint32_t domid)
{
/* returns 1 if the value _could_ be a valid guest domid, 0 otherwise
static int domain_qualifier_to_domid(const char *p, uint32_t *domid_r,
int *was_name_r)
{
- libxl_dominfo dominfo;
int was_name, rc;
was_name = qualifier_to_id(p, domid_r);
if (rc)
return rc;
} else {
- rc = libxl_domain_info(ctx, &dominfo, *domid_r);
+ rc = libxl_domain_info(ctx, NULL, *domid_r);
/* error only if domain does not exist */
if (rc == ERROR_INVAL)
return rc;
info[i].domid, domname);
free(domname);
}
- free(info);
+ libxl_vminfo_list_free(info, nb_vm);
}
static void save_domain_core_begin(const char *domain_spec,
else
list_domains(verbose, context, info, nb_domain);
- free(info_free);
+ if (info_free)
+ libxl_dominfo_list_free(info, nb_domain);
+ else
+ libxl_dominfo_dispose(info);
return 0;
}
for (i = 0; i<nb_domain; i++)
print_domain_vcpuinfo(dominfo[i].domid, physinfo.nr_cpus);
- free(dominfo);
-
+ libxl_dominfo_list_free(dominfo, nb_domain);
} else {
for (; argc > 0; ++argv, --argc) {
if (domain_qualifier_to_domid(*argv, &domid, 0) < 0) {
}
}
vcpulist_out:
- ;
+ libxl_physinfo_dispose(&physinfo);
}
int main_vcpulist(int argc, char **argv)
free(cpumap.map);
}
+ libxl_physinfo_dispose(&info);
return;
}
sharing(info, nb_domain);
if (info_free)
- free(info_free);
+ libxl_dominfo_list_free(info_free, nb_domain);
+ else
+ libxl_dominfo_dispose(info);
return 0;
}
info = libxl_list_vm(ctx, &nb_vm);
for (i = 0; i < nb_vm; i++)
print_domU_uptime(info[i].domid, short_mode, now);
+ libxl_vminfo_list_free(info, nb_vm);
} else {
for (i = 0; i < nb_doms; i++) {
if (doms[i] == 0)