[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: Add a gc to libxl_cpumap_alloc, ..._to_hex_string
# HG changeset patch # User Ian Jackson <ian.jackson@xxxxxxxxxxxxx> # Date 1340905405 -3600 # Node ID a383ea62e716cca326ed597f21e8da4a05fc5e99 # Parent 5ad69631f8279b9ce58540dd7e9b316b8607a5a9 libxl: Add a gc to libxl_cpumap_alloc, ..._to_hex_string In the next patch we are going to change the definition of NOGC to require a local variable libxl__gc *gc. And this means that passing 0 to libxl__calloc is going to be wrong. libxl_cpumap_alloc doesn't have a gc but passes 0 to libxl_calloc Fix this by: - introducing an `out' label and an rc variable - replacing the returns with rc = ERROR_BLAH; goto out; - adding uses of GC_INIT and GC_FREE. - changing NULL to NOGC in the call to libxl__calloc Likewise fix libxl_cpumap_to_hex_string by: - adding a libxl_ctx* parameter and updating the one call site - adding uses of GC_INIT and GC_FREE. - changing NULL to NOGC in the call to libxl__zalloc Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Acked-by: Dario Faggioli <raistlin@xxxxxxxx> Acked-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx> Committed-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> --- diff -r 5ad69631f827 -r a383ea62e716 tools/libxl/libxl_dm.c --- a/tools/libxl/libxl_dm.c Thu Jun 28 18:43:25 2012 +0100 +++ b/tools/libxl/libxl_dm.c Thu Jun 28 18:43:25 2012 +0100 @@ -204,7 +204,7 @@ static char ** libxl__build_device_model } nr_set_cpus = libxl_cpumap_count_set(&b_info->avail_vcpus); - s = libxl_cpumap_to_hex_string(&b_info->avail_vcpus); + s = libxl_cpumap_to_hex_string(CTX, &b_info->avail_vcpus); flexarray_vappend(dm_args, "-vcpu_avail", libxl__sprintf(gc, "%s", s), NULL); free(s); diff -r 5ad69631f827 -r a383ea62e716 tools/libxl/libxl_utils.c --- a/tools/libxl/libxl_utils.c Thu Jun 28 18:43:25 2012 +0100 +++ b/tools/libxl/libxl_utils.c Thu Jun 28 18:43:25 2012 +0100 @@ -491,19 +491,29 @@ int libxl_mac_to_device_nic(libxl_ctx *c int libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap, int max_cpus) { + GC_INIT(ctx); int sz; + int rc; - if (max_cpus < 0) - return ERROR_INVAL; + if (max_cpus < 0) { + rc = ERROR_INVAL; + goto out; + } if (max_cpus == 0) max_cpus = libxl_get_max_cpus(ctx); - if (max_cpus == 0) - return ERROR_FAIL; + if (max_cpus == 0) { + rc = ERROR_FAIL; + goto out; + } sz = (max_cpus + 7) / 8; - cpumap->map = libxl__calloc(NULL, sizeof(*cpumap->map), sz); + cpumap->map = libxl__calloc(NOGC, sizeof(*cpumap->map), sz); cpumap->size = sz; - return 0; + + rc = 0; + out: + GC_FREE; + return rc; } void libxl_cpumap_dispose(libxl_cpumap *map) @@ -542,10 +552,11 @@ int libxl_cpumap_count_set(const libxl_c } /* NB. caller is responsible for freeing the memory */ -char *libxl_cpumap_to_hex_string(const libxl_cpumap *cpumap) +char *libxl_cpumap_to_hex_string(libxl_ctx *ctx, const libxl_cpumap *cpumap) { + GC_INIT(ctx); int i = cpumap->size; - char *p = libxl__zalloc(NULL, cpumap->size * 2 + 3); + char *p = libxl__zalloc(NOGC, cpumap->size * 2 + 3); char *q = p; strncpy(p, "0x", 2); p += 2; @@ -554,6 +565,7 @@ char *libxl_cpumap_to_hex_string(const l p += 2; } *p = '\0'; + GC_FREE; return q; } diff -r 5ad69631f827 -r a383ea62e716 tools/libxl/libxl_utils.h --- a/tools/libxl/libxl_utils.h Thu Jun 28 18:43:25 2012 +0100 +++ b/tools/libxl/libxl_utils.h Thu Jun 28 18:43:25 2012 +0100 @@ -68,7 +68,7 @@ int libxl_cpumap_test(const libxl_cpumap void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu); void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu); int libxl_cpumap_count_set(const libxl_cpumap *cpumap); -char *libxl_cpumap_to_hex_string(const libxl_cpumap *cpumap); +char *libxl_cpumap_to_hex_string(libxl_ctx *ctx, const libxl_cpumap *cpumap); static inline void libxl_cpumap_set_any(libxl_cpumap *cpumap) { memset(cpumap->map, -1, cpumap->size); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |