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);
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;
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;
extern libxl_ctx *ctx;
extern xentoollog_logger_stdiostream *logger;
+void postfork(void);
/* global options */
extern int autoballoon;
} else if (*pid > 0)
return 0;
- libxl_ctx_postfork(ctx);
+ postfork();
sleep(1);
libxl_primary_console_exec(ctx, domid);
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");