aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIan Jackson <ian.jackson@eu.citrix.com>2012-04-11 14:14:17 +0100
committerIan Jackson <ian.jackson@eu.citrix.com>2012-04-11 14:14:17 +0100
commit3d2a8f74e6a6067cfc67923d1bea58959427b753 (patch)
tree98286302132564db766b64a0ae0a9f2e57b0e83e /tools
parent378e96065b390d217e2b381a218ccb7bbb5fbe1e (diff)
downloadxen-3d2a8f74e6a6067cfc67923d1bea58959427b753.tar.gz
xen-3d2a8f74e6a6067cfc67923d1bea58959427b753.tar.bz2
xen-3d2a8f74e6a6067cfc67923d1bea58959427b753.zip
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 <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/libxl/libxl.h1
-rw-r--r--tools/libxl/libxl_utils.c7
-rw-r--r--tools/libxl/xl.c8
-rw-r--r--tools/libxl/xl.h1
-rw-r--r--tools/libxl/xl_cmdimpl.c8
5 files changed, 11 insertions, 14 deletions
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");