Mailing List Archive

[PATCH 5 of 7] libxl: add libxl__spawn_confirm_offspring_startup
# HG changeset patch
# User Olaf Hering <olaf@aepfle.de>
# Date 1319707409 -7200
# Node ID 9d23f31c576395094233326409058078685850d2
# Parent f52460f64b6f58b480d0037a31c20606e9a4ef55
libxl: add libxl__spawn_confirm_offspring_startup

libxl__spawn_confirm_offspring_startup() is a generic version of
libxl__confirm_device_model_startup().

Use libxl__spawn_confirm_offspring_startup for device model.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

diff -r f52460f64b6f -r 9d23f31c5763 tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -890,25 +890,16 @@ out:
return rc;
}

-static int detach_device_model(libxl__gc *gc,
- libxl__spawner_starting *starting)
-{
- int rc;
- rc = libxl__spawn_detach(gc, starting->for_spawn);
- if (starting->for_spawn)
- free(starting->for_spawn);
- free(starting);
- return rc;
-}

int libxl__confirm_device_model_startup(libxl__gc *gc,
libxl__spawner_starting *starting)
{
- int detach;
- int problem = libxl__wait_for_device_model(gc, starting->domid, "running",
- starting->for_spawn, NULL, NULL);
- detach = detach_device_model(gc, starting);
- return problem ? problem : detach;
+ char *path;
+ int domid = starting->domid;
+ path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", domid);
+ return libxl__spawn_confirm_offspring_startup(gc,
+ LIBXL_DEVICE_MODEL_START_TIMEOUT,
+ "Device Model", path, "running", starting);
}

int libxl__destroy_device_model(libxl__gc *gc, uint32_t domid)
diff -r f52460f64b6f -r 9d23f31c5763 tools/libxl/libxl_exec.c
--- a/tools/libxl/libxl_exec.c
+++ b/tools/libxl/libxl_exec.c
@@ -262,6 +262,30 @@ err:
return -1;
}

+static int detach_offspring(libxl__gc *gc,
+ libxl__spawner_starting *starting)
+{
+ int rc;
+ rc = libxl__spawn_detach(gc, starting->for_spawn);
+ if (starting->for_spawn)
+ free(starting->for_spawn);
+ free(starting);
+ return rc;
+}
+
+int libxl__spawn_confirm_offspring_startup(libxl__gc *gc,
+ uint32_t timeout, char *what,
+ char *path, char *state,
+ libxl__spawner_starting *starting)
+{
+ int detach;
+ int problem = libxl__wait_for_offspring(gc, starting->domid, timeout, what,
+ path, state,
+ starting->for_spawn, NULL, NULL);
+ detach = detach_offspring(gc, starting);
+ return problem ? problem : detach;
+}
+
static int libxl__set_fd_flag(libxl__gc *gc, int fd, int flag)
{
int flags;
diff -r f52460f64b6f -r 9d23f31c5763 tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -340,6 +340,12 @@ _hidden int libxl__wait_for_offspring(li
const char *state,
void *userdata),
void *check_callback_userdata);
+
+_hidden int libxl__spawn_confirm_offspring_startup(libxl__gc *gc,
+ uint32_t timeout, char *what,
+ char *path, char *state,
+ libxl__spawner_starting *starting);
+
/* Logs errors. A copy of "what" is taken. Return values:
* < 0 error, for_spawn need not be detached
* +1 caller is the parent, must call detach on *for_spawn eventually

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel