[libvirt] [PATCH 2/2] virsh: Really disconnect on keepalive timeout

Martin Kletzander mkletzan at redhat.com
Sun Nov 30 19:09:09 UTC 2014


Commit 676cb4f4e762b8682a06c6dab1f690fbcd939550 added client keepalive
support for virsh.  But because whenever the connection is closed, virsh
tries to reconnect, unless the disconnection happened with the reason
VIR_CONNECT_CLOSE_REASON_CLIENT.  Because of that, virsh kept trying to
reconnect even when the connection was closed due to keepalive.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1073506

Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
---
 tools/virsh.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index bcfa561..98d8d18 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -327,9 +327,14 @@ static int disconnected; /* we may have been disconnected */
 static void
 vshCatchDisconnect(virConnectPtr conn ATTRIBUTE_UNUSED,
                    int reason,
-                   void *opaque ATTRIBUTE_UNUSED)
+                   void *opaque)
 {
-    if (reason != VIR_CONNECT_CLOSE_REASON_CLIENT)
+    vshControl *ctl = opaque;
+
+    vshDebug(ctl, VSH_ERR_INFO, "Received disconnect with reason '%d'", reason);
+
+    if (reason != VIR_CONNECT_CLOSE_REASON_CLIENT &&
+        reason != VIR_CONNECT_CLOSE_REASON_KEEPALIVE)
         disconnected++;
 }

@@ -407,7 +412,7 @@ vshReconnect(vshControl *ctl)
             vshError(ctl, "%s", _("failed to connect to the hypervisor"));
     } else {
         if (virConnectRegisterCloseCallback(ctl->conn, vshCatchDisconnect,
-                                            NULL, NULL) < 0)
+                                            ctl, NULL) < 0)
             vshError(ctl, "%s", _("Unable to register disconnect callback"));
         if (connected)
             vshError(ctl, "%s", _("Reconnected to the hypervisor"));
@@ -484,7 +489,7 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd)
     }

     if (virConnectRegisterCloseCallback(ctl->conn, vshCatchDisconnect,
-                                        NULL, NULL) < 0)
+                                        ctl, NULL) < 0)
         vshError(ctl, "%s", _("Unable to register disconnect callback"));

     return true;
-- 
2.1.3




More information about the libvir-list mailing list