From 3d2a8f74e6a6067cfc67923d1bea58959427b753 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 11 Apr 2012 14:14:17 +0100 Subject: libxl: abolish libxl_ctx_postfork libxl's task has become too complicated (particularly in the presence of both forking and multithreading) to support reuse of the same libxl_ctx after fork. So abolish libxl_ctx_fork. xl instead simply initialises a new libxl_ctx. Signed-off-by: Ian Jackson Acked-by: Ian Campbell Committed-by: Ian Jackson --- tools/libxl/libxl.h | 1 - tools/libxl/libxl_utils.c | 7 ------- tools/libxl/xl.c | 8 ++++++++ tools/libxl/xl.h | 1 + tools/libxl/xl_cmdimpl.c | 8 ++------ 5 files changed, 11 insertions(+), 14 deletions(-) (limited to 'tools') diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index b3763162ea..edbca535ba 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -461,7 +461,6 @@ int libxl_ctx_alloc(libxl_ctx **pctx, int version, unsigned flags /* none currently defined */, xentoollog_logger *lg); int libxl_ctx_free(libxl_ctx *ctx /* 0 is OK */); -int libxl_ctx_postfork(libxl_ctx *ctx); /* domain related functions */ typedef int (*libxl_console_ready)(libxl_ctx *ctx, uint32_t domid, void *priv); diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index d6cd78d8f2..0cbd85e543 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -365,13 +365,6 @@ READ_WRITE_EXACTLY(read, 1, /* */) READ_WRITE_EXACTLY(write, 0, const) -int libxl_ctx_postfork(libxl_ctx *ctx) { - if (ctx->xsh) xs_daemon_destroy_postfork(ctx->xsh); - ctx->xsh = xs_daemon_open(); - if (!ctx->xsh) return ERROR_FAIL; - return 0; -} - pid_t libxl_fork(libxl_ctx *ctx) { pid_t pid; diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c index 2b148147f9..62c0abde96 100644 --- a/tools/libxl/xl.c +++ b/tools/libxl/xl.c @@ -94,6 +94,14 @@ static void parse_global_config(const char *configfile, xlu_cfg_destroy(config); } +void postfork(void) +{ + if (libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, (xentoollog_logger*)logger)) { + fprintf(stderr, "cannot reinit xl context after fork\n"); + exit(-1); + } +} + int main(int argc, char **argv) { int opt = 0; diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h index 0a3d628d45..7e258d5408 100644 --- a/tools/libxl/xl.h +++ b/tools/libxl/xl.h @@ -105,6 +105,7 @@ struct cmd_spec *cmdtable_lookup(const char *s); extern libxl_ctx *ctx; extern xentoollog_logger_stdiostream *logger; +void postfork(void); /* global options */ extern int autoballoon; diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 6f4dd09c88..c9e9943c53 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1441,7 +1441,7 @@ static int autoconnect_console(libxl_ctx *ctx, uint32_t domid, void *priv) } else if (*pid > 0) return 0; - libxl_ctx_postfork(ctx); + postfork(); sleep(1); libxl_primary_console_exec(ctx, domid); @@ -1728,11 +1728,7 @@ start: goto out; } - rc = libxl_ctx_postfork(ctx); - if (rc) { - LOG("failed to reinitialise context after fork"); - exit(-1); - } + postfork(); if (asprintf(&name, "xl-%s", d_config.c_info.name) < 0) { LOG("Failed to allocate memory in asprintf"); -- cgit v1.2.3