From: Ian Campbell Date: Mon, 17 Sep 2012 10:16:59 +0000 (+0100) Subject: xl: free libxl context, logger and lockfile using atexit handler X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~7894 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5e61076e8f6e48856dacbd65499d6cb69d31976b;p=xen.git 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 --- 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; }