]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
destroy: Define new public API virDomainDestroyFlags
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 20 Jul 2011 15:02:48 +0000 (17:02 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 21 Jul 2011 18:38:35 +0000 (20:38 +0200)
This introduces new API virDomainDestroyFlags to allow
domain destroying with flags, as the existing API virDomainDestroy
misses flags.

The set of flags is defined in virDomainDestroyFlagsValues enum,
which is currently commented, because it is empty.

Calling this API with no flags set (@flags == 0) is equivalent calling
virDomainDestroy.

include/libvirt/libvirt.h.in
src/driver.h
src/libvirt.c
src/libvirt_public.syms

index 8fa7daec8576501b8ee04239df1436c2ac9fbca4..0b7e35f9169abc33ff83dd97090398f5b9ccbab8 100644 (file)
@@ -915,6 +915,11 @@ virConnectPtr           virDomainGetConnect     (virDomainPtr domain);
 /*
  * Domain creation and destruction
  */
+
+/*
+ * typedef enum {
+ * } virDomainDestroyFlagsValues;
+ */
 virDomainPtr            virDomainCreateXML      (virConnectPtr conn,
                                                  const char *xmlDesc,
                                                  unsigned int flags);
@@ -931,6 +936,8 @@ int                     virDomainShutdown       (virDomainPtr domain);
 int                     virDomainReboot         (virDomainPtr domain,
                                                  unsigned int flags);
 int                     virDomainDestroy        (virDomainPtr domain);
+int                     virDomainDestroyFlags   (virDomainPtr domain,
+                                                 unsigned int flags);
 int                     virDomainRef            (virDomainPtr domain);
 int                     virDomainFree           (virDomainPtr domain);
 
index d931c9b9b75941ea5c42c3328d48774138ddc617..4df54964dd64eb0fd2e7e7224ac1d6071f1e0623 100644 (file)
@@ -124,6 +124,9 @@ typedef int
                                          unsigned int flags);
 typedef int
         (*virDrvDomainDestroy)         (virDomainPtr domain);
+typedef int
+        (*virDrvDomainDestroyFlags) (virDomainPtr domain,
+                                         unsigned int flags);
 typedef char *
         (*virDrvDomainGetOSType)       (virDomainPtr domain);
 typedef unsigned long
@@ -711,6 +714,7 @@ struct _virDriver {
     virDrvDomainShutdown               domainShutdown;
     virDrvDomainReboot         domainReboot;
     virDrvDomainDestroy                domainDestroy;
+    virDrvDomainDestroyFlags    domainDestroyFlags;
     virDrvDomainGetOSType              domainGetOSType;
     virDrvDomainGetMaxMemory   domainGetMaxMemory;
     virDrvDomainSetMaxMemory   domainSetMaxMemory;
index 67041c67295154d8a6ace00191b2c503576e97be..7fb1bc1dbce8e3b09eb0a53715103d3012e28adb 100644 (file)
@@ -2077,6 +2077,58 @@ error:
     return -1;
 }
 
+/**
+ * virDomainDestroyFlags:
+ * @domain: a domain object
+ * @flags: an OR'ed set of virDomainDestroyFlagsValues
+ *
+ * Destroy the domain object. The running instance is shutdown if not down
+ * already and all resources used by it are given back to the hypervisor.
+ * This does not free the associated virDomainPtr object.
+ * This function may require privileged access.
+ *
+ * Calling this function with no @flags set (equal to zero)
+ * is equivalent to calling virDomainDestroy.
+ *
+ * Returns 0 in case of success and -1 in case of failure.
+ */
+int
+virDomainDestroyFlags(virDomainPtr domain,
+                      unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain);
+
+    virResetLastError();
+
+    if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+
+    conn = domain->conn;
+    if (conn->flags & VIR_CONNECT_RO) {
+        virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+        goto error;
+    }
+
+    if (conn->driver->domainDestroyFlags) {
+        int ret;
+        ret = conn->driver->domainDestroyFlags(domain, flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(conn);
+    return -1;
+}
+
 /**
  * virDomainFree:
  * @domain: a domain object
index 6935140df85e8de1bb58321504875b9e62a71669..9336df4d63247af4b5a70864e75f4f271bdce49d 100644 (file)
@@ -471,6 +471,7 @@ LIBVIRT_0.9.4 {
         virDomainRestoreFlags;
         virDomainSaveFlags;
         virDomainUndefineFlags;
+        virDomainDestroyFlags;
 } LIBVIRT_0.9.3;
 
 # .... define new API here using predicted next version number ....