|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: do not leak qemu saved state on restore
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1323790938 0
# Node ID e9c66c268a1f7432f60c83f63a3aa0770628e9a6
# Parent 983b551e44077ace454a397181c93533e0a534b5
libxl: do not leak qemu saved state on restore
In particular do not leak /var/lib/xen/qemu-resume.<domid>.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
diff -r 983b551e4407 -r e9c66c268a1f tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c Tue Dec 13 15:39:28 2011 +0000
+++ b/tools/libxl/libxl_create.c Tue Dec 13 15:42:18 2011 +0000
@@ -620,7 +620,7 @@
== LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
libxl__qmp_initializations(ctx, domid);
}
- ret = libxl__confirm_device_model_startup(gc, dm_starting);
+ ret = libxl__confirm_device_model_startup(gc, dm_info, dm_starting);
if (ret < 0) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
"device model did not start: %d", ret);
diff -r 983b551e4407 -r e9c66c268a1f tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c Tue Dec 13 15:39:28 2011 +0000
+++ b/tools/libxl/libxl_dm.c Tue Dec 13 15:42:18 2011 +0000
@@ -751,7 +751,8 @@
ret = ERROR_FAIL;
goto out_free;
}
- if (libxl__confirm_device_model_startup(gc, dm_starting) < 0) {
+ if (libxl__confirm_device_model_startup(gc, &xenpv_dm_info,
+ dm_starting) < 0) {
ret = ERROR_FAIL;
goto out_free;
}
@@ -892,14 +893,26 @@
int libxl__confirm_device_model_startup(libxl__gc *gc,
- libxl__spawner_starting *starting)
+ libxl_device_model_info *dm_info,
+ libxl__spawner_starting *starting)
{
+ libxl_ctx *ctx = libxl__gc_owner(gc);
char *path;
int domid = starting->domid;
+ int ret, ret2;
path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", domid);
- return libxl__spawn_confirm_offspring_startup(gc,
+ ret = libxl__spawn_confirm_offspring_startup(gc,
LIBXL_DEVICE_MODEL_START_TIMEOUT,
"Device Model", path, "running",
starting);
+ if (dm_info->saved_state) {
+ ret2 = unlink(dm_info->saved_state);
+ if (ret2) LIBXL__LOG_ERRNO(ctx, XTL_ERROR,
+ "failed to remove device-model state %s\n",
+ dm_info->saved_state);
+ /* Do not clobber spawn_confirm error code with unlink error code. */
+ if (!ret) ret = ret2;
+ }
+ return ret;
}
int libxl__destroy_device_model(libxl__gc *gc, uint32_t domid)
diff -r 983b551e4407 -r e9c66c268a1f tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h Tue Dec 13 15:39:28 2011 +0000
+++ b/tools/libxl/libxl_internal.h Tue Dec 13 15:42:18 2011 +0000
@@ -438,6 +438,7 @@
* return pass *starting_r (which will be non-0) to
* libxl__confirm_device_model_startup or libxl__detach_device_model. */
_hidden int libxl__confirm_device_model_startup(libxl__gc *gc,
+ libxl_device_model_info *dm_info,
libxl__spawner_starting *starting);
_hidden int libxl__detach_device_model(libxl__gc *gc, libxl__spawner_starting
*starting);
_hidden int libxl__wait_for_device_model(libxl__gc *gc,
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |