[virt-tools-list] [PATCH virt-viewer] Unregister events and callbacks on dispose

Ján Tomko jtomko at redhat.com
Thu Jul 25 13:20:06 UTC 2013


Without these libvirtd reports an error on virt-viewer shutdown:
virNetSocketReadWire:1377 : End of file while reading data: Input/output
error
---
 src/virt-viewer.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 207c9ca..b98c252 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -67,6 +67,7 @@ static gboolean virt_viewer_initial_connect(VirtViewerApp *self, GError **error)
 static gboolean virt_viewer_open_connection(VirtViewerApp *self, int *fd);
 static void virt_viewer_deactivated(VirtViewerApp *self, gboolean connect_error);
 static gboolean virt_viewer_start(VirtViewerApp *self);
+static void virt_viewer_dispose (GObject *object);
 
 static void
 virt_viewer_get_property (GObject *object, guint property_id,
@@ -89,18 +90,6 @@ virt_viewer_set_property (GObject *object, guint property_id,
 }
 
 static void
-virt_viewer_dispose (GObject *object)
-{
-    VirtViewer *self = VIRT_VIEWER(object);
-    VirtViewerPrivate *priv = self->priv;
-    if (priv->dom)
-        virDomainFree(priv->dom);
-    if (priv->conn)
-        virConnectClose(priv->conn);
-    G_OBJECT_CLASS(virt_viewer_parent_class)->dispose (object);
-}
-
-static void
 virt_viewer_class_init (VirtViewerClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -513,6 +502,24 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED,
     virt_viewer_app_start_reconnect_poll(app);
 }
 
+static void
+virt_viewer_dispose (GObject *object)
+{
+    VirtViewer *self = VIRT_VIEWER(object);
+    VirtViewerPrivate *priv = self->priv;
+
+    if (priv->withEvents)
+        virConnectDomainEventDeregister(priv->conn,
+                                        virt_viewer_domain_event);
+    virConnectUnregisterCloseCallback(priv->conn,
+                                      virt_viewer_conn_event);
+    if (priv->dom)
+        virDomainFree(priv->dom);
+    if (priv->conn)
+        virConnectClose(priv->conn);
+    G_OBJECT_CLASS(virt_viewer_parent_class)->dispose (object);
+}
+
 static int virt_viewer_connect(VirtViewerApp *app);
 
 static gboolean
-- 
1.8.1.5




More information about the virt-tools-list mailing list