# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1281709508 -3600
# Node ID 72d92574410da1d388dd33e5fe10e955fd1a93ec
# Parent adefd8ef59992b04b6d7da35f81ff6d7cc48a6a6
libxl: do not leak uuid strings used internally
Use string_of_uuid (which adds the string to the gc context) instead
of libxl_uuid_to_string (which adds the string to the context and then
strdups it!).
Fixes this valgrind warning:
==10005== 37 bytes in 1 blocks are definitely lost in loss record 1 of 1
==10005== at 0x4022F0A: malloc (vg_replace_malloc.c:236)
==10005== by 0x411A22F: strdup (in /lib/i686/cmov/libc-2.7.so)
==10005== by 0x4047930: libxl_uuid2string (libxl_dom.c:454)
==10005== by 0x404185A: libxl_domain_make (libxl.c:121)
==10005== by 0x8056F5B: create_domain (xl_cmdimpl.c:1387)
==10005== by 0x8058216: main_create (xl_cmdimpl.c:3171)
==10005== by 0x804B5AB: main (xl.c:76)
libxl_domain_preserve and libxl_set_memory_target suffer the same
problem by inspection only.
Also since string_of_uuid now takes a gc not a ctx rename the variable
to be less confusing.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
diff -r adefd8ef5999 -r 72d92574410d tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Fri Aug 13 14:47:53 2010 +0100
+++ b/tools/libxl/libxl.c Fri Aug 13 15:25:08 2010 +0100
@@ -118,7 +118,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 = string_of_uuid(&gc, info->uuid);
if (!uuid_string) {
libxl_free_all(&gc);
return ERROR_NOMEM;
@@ -481,7 +481,7 @@ int libxl_domain_preserve(libxl_ctx *ctx
return ERROR_NOMEM;
}
- uuid_string = libxl_uuid2string(ctx, new_uuid);
+ uuid_string = string_of_uuid(&gc, new_uuid);
if (!uuid_string) {
libxl_free_all(&gc);
return ERROR_NOMEM;
@@ -2813,7 +2813,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 = string_of_uuid(&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 adefd8ef5999 -r 72d92574410d tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h Fri Aug 13 14:47:53 2010 +0100
+++ b/tools/libxl/libxl_internal.h Fri Aug 13 15:25:08 2010 +0100
@@ -107,8 +107,8 @@ typedef struct {
#define PRINTF_ATTRIBUTE(x, y) __attribute__((format(printf, x, y)))
#define UUID_FMT
"%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
-#define string_of_uuid(ctx, u) \
- libxl_sprintf(ctx, UUID_FMT, \
+#define string_of_uuid(gc, u) \
+ libxl_sprintf(gc, UUID_FMT, \
(u)[0], (u)[1], (u)[2], (u)[3], (u)[4], (u)[5], (u)[6],
(u)[7], \
(u)[8], (u)[9], (u)[10], (u)[11], (u)[12], (u)[13], (u)[14],
(u)[15])
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|