[libvirt] [PATCH v2 3/9] admin: Introduce virAdmConnectIsAlive

Erik Skultety eskultet at redhat.com
Fri Oct 16 18:12:20 UTC 2015


Since most of our APIs rely on an acive functional connection to a daemon and
we have such a mechanism in libvirt already, there's need to have such a way in
libvirt-admin as well. By introducing a new public API, this patch provides
support to check for an active connection.
---
 include/libvirt/libvirt-admin.h |  1 +
 src/libvirt-admin.c             | 31 +++++++++++++++++++++++++++++++
 src/libvirt_admin_public.syms   |  1 +
 tools/virt-admin.c              |  2 +-
 4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/include/libvirt/libvirt-admin.h b/include/libvirt/libvirt-admin.h
index 9997cc2..72671c6 100644
--- a/include/libvirt/libvirt-admin.h
+++ b/include/libvirt/libvirt-admin.h
@@ -52,6 +52,7 @@ virAdmConnectPtr virAdmConnectOpen(const char *name, unsigned int flags);
 int virAdmConnectClose(virAdmConnectPtr conn);
 
 int virAdmConnectRef(virAdmConnectPtr conn);
+int virAdmConnectIsAlive(virAdmConnectPtr conn);
 
 # ifdef __cplusplus
 }
diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c
index 5a4fc48..f0824dd 100644
--- a/src/libvirt-admin.c
+++ b/src/libvirt-admin.c
@@ -386,3 +386,34 @@ virAdmConnectRef(virAdmConnectPtr conn)
 
     return 0;
 }
+
+/**
+ * virAdmConnectIsAlive:
+ * @conn: connection to admin server
+ *
+ * Decide whether the connection to the admin server is alive or not.
+ * Connection is considered alive if the channel it is running over is not
+ * closed.
+ *
+ * Returns 1, if the connection is alive, 0 if the channel has already
+ * been closed.
+ */
+int
+virAdmConnectIsAlive(virAdmConnectPtr conn)
+{
+    bool ret;
+    remoteAdminPrivPtr priv = conn->privateData;
+
+    VIR_DEBUG("conn=%p", conn);
+
+    virResetLastError();
+
+    virObjectLock(priv);
+    ret = virNetClientIsOpen(priv->client);
+    virObjectUnlock(priv);
+
+    if (ret)
+        return 1;
+    else
+        return 0;
+}
diff --git a/src/libvirt_admin_public.syms b/src/libvirt_admin_public.syms
index d9e3c0b..16cfd42 100644
--- a/src/libvirt_admin_public.syms
+++ b/src/libvirt_admin_public.syms
@@ -15,4 +15,5 @@ LIBVIRT_ADMIN_1.3.0 {
         virAdmConnectOpen;
         virAdmConnectClose;
         virAdmConnectRef;
+        virAdmConnectIsAlive;
 };
diff --git a/tools/virt-admin.c b/tools/virt-admin.c
index cc33b7b..1bc10b0 100644
--- a/tools/virt-admin.c
+++ b/tools/virt-admin.c
@@ -171,7 +171,7 @@ vshAdmConnectionHandler(vshControl *ctl)
     if (!priv->conn || disconnected)
         vshAdmReconnect(ctl);
 
-    if (!priv->conn) {
+    if (!priv->conn || !virAdmConnectIsAlive(priv->conn)) {
         vshError(ctl, "%s", _("no valid connection"));
         return NULL;
     }
-- 
2.4.3




More information about the libvir-list mailing list