From 5e61076e8f6e48856dacbd65499d6cb69d31976b Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Mon, 17 Sep 2012 11:16:59 +0100 Subject: xl: free libxl context, logger and lockfile using atexit handler xl frequently just calls exit(3), especially on error. Try to clean up some of our global state to make tools like valgrind more useful. Signed-off-by: Ian Campbell Acked-by: Ian Jackson Committed-by: Ian Campbell --- tools/libxl/xl.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'tools') diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c index f31e836e87..ecbcd3bf1d 100644 --- a/tools/libxl/xl.c +++ b/tools/libxl/xl.c @@ -191,6 +191,22 @@ void xl_ctx_alloc(void) { libxl_childproc_setmode(ctx, &childproc_hooks, 0); } +static void xl_ctx_free(void) +{ + if (ctx) { + libxl_ctx_free(ctx); + ctx = NULL; + } + if (logger) { + xtl_logger_destroy((xentoollog_logger*)logger); + logger = NULL; + } + if (lockfile) { + free(lockfile); + lockfile = NULL; + } +} + int main(int argc, char **argv) { int opt = 0; @@ -229,6 +245,8 @@ int main(int argc, char **argv) logger = xtl_createlogger_stdiostream(stderr, minmsglevel, 0); if (!logger) exit(1); + atexit(xl_ctx_free); + xl_ctx_alloc(); ret = libxl_read_file_contents(ctx, XL_GLOBAL_CONFIG, @@ -274,8 +292,6 @@ int main(int argc, char **argv) } xit: - libxl_ctx_free(ctx); - xtl_logger_destroy((xentoollog_logger*)logger); return ret; } -- cgit v1.2.3