[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH] xl: make libxl_uuid2string internal to libxenlight
I'm happy for this to replace patches 1+2 of my previous series (although I think #3 stands alone and is still useful) However I think this makes string_of_uuid a bit pointless -- it adds nothing to libxl_uuid2string and only has one caller which could just as well use libxl_uuid2string. Ian. On Fri, 2010-08-13 at 15:33 +0100, Gianni Tedesco (3P) wrote: > libxenlight exports a function libxl_uuid2string which is used > internally in several places but has one external caller in xl. The > function mainly implements policy so should not be part of the > libxenlight API. The extent to which it can be considered mechanism it > is not a xen mechanism since UUID's are not a concept exlusive to xen. > > The one caller in xl seems to be an "odd-one-out" since xl has its own > UUID formatting macros in any case. > > This change fixes the leaks in libxl internal callers which were not > expecting to have to free() the UUID since the per-api-call-gc-lifetime > patch. > > Signed-off-by: Gianni Tedesco <gianni.tedesco@xxxxxxxxxx> > > diff -r dc335ebde3b5 tools/libxl/libxl.c > --- a/tools/libxl/libxl.c Thu Aug 12 18:03:23 2010 +0100 > +++ b/tools/libxl/libxl.c Fri Aug 13 15:32:31 2010 +0100 > @@ -90,7 +90,7 @@ int libxl_domain_make(libxl_ctx *ctx, li > xs_transaction_t t; > xen_domain_handle_t handle; > > - uuid_string = libxl_uuid2string(ctx, info->uuid); > + uuid_string = libxl_uuid2string(&gc, info->uuid); > if (!uuid_string) { > libxl_free_all(&gc); > return ERROR_NOMEM; > @@ -453,7 +453,7 @@ int libxl_domain_preserve(libxl_ctx *ctx > return ERROR_NOMEM; > } > > - uuid_string = libxl_uuid2string(ctx, new_uuid); > + uuid_string = libxl_uuid2string(&gc, new_uuid); > if (!uuid_string) { > libxl_free_all(&gc); > return ERROR_NOMEM; > @@ -2785,7 +2785,7 @@ int libxl_set_memory_target(libxl_ctx *c > if (rc != 1 || info.domain != domid) > goto out; > xcinfo2xlinfo(&info, &ptr); > - uuid = libxl_uuid2string(ctx, ptr.uuid); > + uuid = libxl_uuid2string(&gc, ptr.uuid); > libxl_xs_write(&gc, XBT_NULL, libxl_sprintf(&gc, "/vm/%s/memory", uuid), > "%"PRIu32, target_memkb / 1024); > > if (enforce || !domid) > diff -r dc335ebde3b5 tools/libxl/libxl.h > --- a/tools/libxl/libxl.h Thu Aug 12 18:03:23 2010 +0100 > +++ b/tools/libxl/libxl.h Fri Aug 13 15:32:31 2010 +0100 > @@ -362,7 +362,6 @@ int libxl_run_bootloader(libxl_ctx *ctx, > libxl_device_disk *disk, > uint32_t domid); > > -char *libxl_uuid2string(libxl_ctx *ctx, const libxl_uuid uuid); > /* 0 means ERROR_ENOMEM, which we have logged */ > > /* events handling */ > diff -r dc335ebde3b5 tools/libxl/libxl_dom.c > --- a/tools/libxl/libxl_dom.c Thu Aug 12 18:03:23 2010 +0100 > +++ b/tools/libxl/libxl_dom.c Fri Aug 13 15:32:31 2010 +0100 > @@ -442,19 +442,12 @@ int save_device_model(libxl_ctx *ctx, ui > return 0; > } > > -char *libxl_uuid2string(libxl_ctx *ctx, const libxl_uuid uuid) > +char *libxl_uuid2string(libxl_gc *gc, const libxl_uuid uuid) > { > - libxl_gc gc = LIBXL_INIT_GC(ctx); > - char *s = string_of_uuid(&gc, uuid); > - char *ret; > - if (!s) { > - XL_LOG(ctx, XL_LOG_ERROR, "cannot allocate for uuid"); > - ret = NULL; > - }else{ > - ret = strdup(s); > - } > - libxl_free_all(&gc); > - return ret; > + char *s = string_of_uuid(gc, uuid); > + if (!s) > + XL_LOG(libxl_gc_owner(gc), XL_LOG_ERROR, "cannot allocate for uuid"); > + return s; > } > > static const char *userdata_path(libxl_gc *gc, uint32_t domid, > diff -r dc335ebde3b5 tools/libxl/libxl_internal.h > --- a/tools/libxl/libxl_internal.h Thu Aug 12 18:03:23 2010 +0100 > +++ b/tools/libxl/libxl_internal.h Fri Aug 13 15:32:31 2010 +0100 > @@ -249,4 +249,6 @@ _hidden char *libxl_abs_path(libxl_gc *g > _hidden char *_libxl_domid_to_name(libxl_gc *gc, uint32_t domid); > _hidden char *_libxl_poolid_to_name(libxl_gc *gc, uint32_t poolid); > > +_hidden char *libxl_uuid2string(libxl_gc *gc, const libxl_uuid uuid); > + > #endif > diff -r dc335ebde3b5 tools/libxl/xl_cmdimpl.c > --- a/tools/libxl/xl_cmdimpl.c Thu Aug 12 18:03:23 2010 +0100 > +++ b/tools/libxl/xl_cmdimpl.c Fri Aug 13 15:32:31 2010 +0100 > @@ -41,6 +41,10 @@ > #include "xl.h" > > #define UUID_FMT > "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" > +#define UUID_BYTES(uuid) uuid[0], uuid[1], uuid[2], uuid[3], \ > + uuid[4], uuid[5], uuid[6], uuid[7], \ > + uuid[8], uuid[9], uuid[10], uuid[11], \ > + uuid[12], uuid[13], uuid[14], uuid[15] \ > > #define CHK_ERRNO( call ) ({ \ > int chk_errno = (call); \ > @@ -2169,10 +2173,8 @@ void list_domains(int verbose, const lib > info[i].dying ? 'd' : '-', > ((float)info[i].cpu_time / 1e9)); > free(domname); > - if (verbose) { > - char *uuid = libxl_uuid2string(&ctx, info[i].uuid); > - printf(" %s", uuid); > - } > + if (verbose) > + printf(" " UUID_FMT, UUID_BYTES(info[i].uuid)); > putchar('\n'); > } > } > @@ -2192,11 +2194,7 @@ void list_vm(void) > printf("UUID ID name\n"); > for (i = 0; i < nb_vm; i++) { > domname = libxl_domid_to_name(&ctx, info[i].domid); > - printf(UUID_FMT " %d %-30s\n", > - info[i].uuid[0], info[i].uuid[1], info[i].uuid[2], > info[i].uuid[3], > - info[i].uuid[4], info[i].uuid[5], info[i].uuid[6], > info[i].uuid[7], > - info[i].uuid[8], info[i].uuid[9], info[i].uuid[10], > info[i].uuid[11], > - info[i].uuid[12], info[i].uuid[13], info[i].uuid[14], > info[i].uuid[15], > + printf(UUID_FMT " %d %-30s\n", UUID_BYTES(info[i].uuid), > info[i].domid, domname); > free(domname); > } > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |