]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libvirt: add stateShutdownPrepare/stateShutdownWait to drivers
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Thu, 9 Jul 2020 07:46:34 +0000 (10:46 +0300)
committerNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Mon, 7 Sep 2020 06:33:58 +0000 (09:33 +0300)
stateShutdownPrepare is supposed to inform driver that it will be closed soon
so that the driver can prepare and finish all background threads quickly on
stateShutdownWait call.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
scripts/check-drivername.py
src/driver-state.h
src/libvirt.c
src/libvirt_internal.h
src/libvirt_private.syms

index 39eff836c7ef68af974309731156b09455751a7e..cce8e7dc88ceb225570f0e518b0882c7b8004d37 100644 (file)
@@ -50,6 +50,8 @@ for drvfile in drvfiles:
                     "virDrvStateCleanup",
                     "virDrvStateReload",
                     "virDrvStateStop",
+                    "virDrvStateShutdownPrepare",
+                    "virDrvStateShutdownWait",
                     "virDrvConnectSupportsFeature",
                     "virDrvConnectURIProbe",
                     "virDrvDomainMigratePrepare",
index 6b3f501e055b2196367107bee1bbb31c74063961..767d8e898db5aa4c424a76fc3a86c75a15769dcd 100644 (file)
@@ -45,6 +45,12 @@ typedef int
 typedef int
 (*virDrvStateStop)(void);
 
+typedef int
+(*virDrvStateShutdownPrepare)(void);
+
+typedef int
+(*virDrvStateShutdownWait)(void);
+
 typedef struct _virStateDriver virStateDriver;
 typedef virStateDriver *virStateDriverPtr;
 
@@ -55,4 +61,6 @@ struct _virStateDriver {
     virDrvStateCleanup stateCleanup;
     virDrvStateReload stateReload;
     virDrvStateStop stateStop;
+    virDrvStateShutdownPrepare stateShutdownPrepare;
+    virDrvStateShutdownWait stateShutdownWait;
 };
index 39e465dd1c148cf4f6756d365255bc07f9fd2ce0..0748eb2352b37890d23e3108f1046874c7d8f701 100644 (file)
@@ -672,6 +672,48 @@ virStateInitialize(bool privileged,
 }
 
 
+/**
+ * virStateShutdownPrepare:
+ *
+ * Run each virtualization driver's shutdown prepare method.
+ *
+ * Returns 0 if all succeed, -1 upon any failure.
+ */
+int
+virStateShutdownPrepare(void)
+{
+    size_t i;
+
+    for (i = 0; i < virStateDriverTabCount; i++) {
+        if (virStateDriverTab[i]->stateShutdownPrepare &&
+            virStateDriverTab[i]->stateShutdownPrepare() < 0)
+            return -1;
+    }
+    return 0;
+}
+
+
+/**
+ * virStateShutdownWait:
+ *
+ * Run each virtualization driver's shutdown wait method.
+ *
+ * Returns 0 if all succeed, -1 upon any failure.
+ */
+int
+virStateShutdownWait(void)
+{
+    size_t i;
+
+    for (i = 0; i < virStateDriverTabCount; i++) {
+        if (virStateDriverTab[i]->stateShutdownWait &&
+            virStateDriverTab[i]->stateShutdownWait() < 0)
+            return -1;
+    }
+    return 0;
+}
+
+
 /**
  * virStateCleanup:
  *
index cb239b3c1c4412f9d260a4c69ee7d4e12793a6d3..2bf7744bd6f1305bacdcaad8af3b22f6c0dc7ee0 100644 (file)
@@ -34,6 +34,8 @@ int virStateInitialize(bool privileged,
                        const char *root,
                        virStateInhibitCallback inhibit,
                        void *opaque);
+int virStateShutdownPrepare(void);
+int virStateShutdownWait(void);
 int virStateCleanup(void);
 int virStateReload(void);
 int virStateStop(void);
index 1272ac6506bfcfb0da8671959854ec3d5e310e34..3b9606a366e161d1e2c77174c1543854e6dc0b6c 100644 (file)
@@ -1509,6 +1509,8 @@ virSetSharedStorageDriver;
 virStateCleanup;
 virStateInitialize;
 virStateReload;
+virStateShutdownPrepare;
+virStateShutdownWait;
 virStateStop;
 virStreamInData;