libxl: remove xenstore /local/domain/<domid> after reading /vm and /vss paths
authorIan Campbell <ian.campbell@citrix.com>
Fri, 23 Jul 2010 16:06:16 +0000 (17:06 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Fri, 23 Jul 2010 16:06:16 +0000 (17:06 +0100)
On domain destroy libxl currently tries to find the /vm/<uuid> and
/vss/<uuid> paths by reading /local/domain/<domid>/{vm,vss} but does
so after removing /local/domain/<domid> which isn't much use.

Also construct the xenstore path in destroy the same way as in create. It's not
wrong but I had to look twice to check they were doing the same thing.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxl/libxl.c

index 07989ece7438fd093a2ba0c2cd10d967eee0f6a4..f064e10caf1fbe15fe10779f576ced06d0a258f6 100644 (file)
@@ -773,19 +773,20 @@ int libxl_domain_destroy(struct libxl_ctx *ctx, uint32_t domid, int force)
     }
     if (libxl_devices_destroy(ctx, domid, force) < 0)
         XL_LOG(ctx, XL_LOG_ERROR, "libxl_destroy_devices failed for %d", domid);
-    if (!xs_rm(ctx->xsh, XBT_NULL, dom_path))
-        XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "xs_rm failed for %s", dom_path);
 
-    vm_path = libxl_xs_read(ctx, XBT_NULL, libxl_sprintf(ctx, "/local/domain/%d/vm", domid));
+    vm_path = libxl_xs_read(ctx, XBT_NULL, libxl_sprintf(ctx, "%s/vm", dom_path));
     if (vm_path)
         if (!xs_rm(ctx->xsh, XBT_NULL, vm_path))
             XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "xs_rm failed for %s", vm_path);
 
-    vss_path = libxl_xs_read(ctx, XBT_NULL, libxl_sprintf(ctx, "/local/domain/%d/vss", domid));
+    vss_path = libxl_xs_read(ctx, XBT_NULL, libxl_sprintf(ctx, "%s/vss", dom_path));
     if (vss_path)
         if (!xs_rm(ctx->xsh, XBT_NULL, vss_path))
             XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "xs_rm failed for %s", vss_path);
 
+    if (!xs_rm(ctx->xsh, XBT_NULL, dom_path))
+        XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "xs_rm failed for %s", dom_path);
+
     xapi_path = libxl_sprintf(ctx, "/xapi/%u", domid);
     if (xapi_path)
         if (!xs_rm(ctx->xsh, XBT_NULL, xapi_path))