[libvirt] [PATCH 1/4] libvirt: introduce hypervisor driver shutdown function

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Wed Oct 25 09:05:05 UTC 2017


This function is called by daemon before shutting down netdaemon
threads that serves client requests to make sure all these threads
will be able to shutdown.
---
 daemon/libvirtd.c        |  2 ++
 src/driver-state.h       |  4 ++++
 src/libvirt.c            | 18 ++++++++++++++++++
 src/libvirt_internal.h   |  1 +
 src/libvirt_private.syms |  1 +
 5 files changed, 26 insertions(+)

diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 589b321..d2bbe1e 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -1504,6 +1504,8 @@ int main(int argc, char **argv) {
     virObjectUnref(lxcProgram);
     virObjectUnref(qemuProgram);
     virObjectUnref(adminProgram);
+    if (driversInitialized)
+        virStateShutdown();
     virNetDaemonClose(dmn);
     virObjectUnref(srv);
     virObjectUnref(srvAdm);
diff --git a/src/driver-state.h b/src/driver-state.h
index 1cb3e4f..ea549a7 100644
--- a/src/driver-state.h
+++ b/src/driver-state.h
@@ -42,6 +42,9 @@ typedef int
 typedef int
 (*virDrvStateStop)(void);
 
+typedef void
+(*virDrvStateShutdown)(void);
+
 typedef struct _virStateDriver virStateDriver;
 typedef virStateDriver *virStateDriverPtr;
 
@@ -52,6 +55,7 @@ struct _virStateDriver {
     virDrvStateCleanup stateCleanup;
     virDrvStateReload stateReload;
     virDrvStateStop stateStop;
+    virDrvStateShutdown stateShutdown;
 };
 
 
diff --git a/src/libvirt.c b/src/libvirt.c
index 536d56f..330c5ce 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -812,6 +812,24 @@ virStateCleanup(void)
 
 
 /**
+ * virStateShutdown:
+ *
+ * Run each virtualization driver's shutdown method.
+ *
+ */
+void
+virStateShutdown(void)
+{
+    int r;
+
+    for (r = virStateDriverTabCount - 1; r >= 0; r--) {
+        if (virStateDriverTab[r]->stateShutdown)
+            virStateDriverTab[r]->stateShutdown();
+    }
+}
+
+
+/**
  * virStateReload:
  *
  * Run each virtualization driver's reload method.
diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h
index 62f490a..9863b07 100644
--- a/src/libvirt_internal.h
+++ b/src/libvirt_internal.h
@@ -36,6 +36,7 @@ int virStateInitialize(bool privileged,
 int virStateCleanup(void);
 int virStateReload(void);
 int virStateStop(void);
+void virStateShutdown(void);
 
 /* Feature detection.  This is a libvirt-private interface for determining
  * what features are supported by the driver.
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 448d962..84af751 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1194,6 +1194,7 @@ virSetSharedStorageDriver;
 virStateCleanup;
 virStateInitialize;
 virStateReload;
+virStateShutdown;
 virStateStop;
 virStreamInData;
 
-- 
1.8.3.1




More information about the libvir-list mailing list