Re: [PATCH v2 virt-viewer] App: keep hash table of displays

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2014-09-05 at 00:42 +0200, Fabiano Fidêncio wrote:
> On Thu, 2014-09-04 at 15:34 -0500, Jonathon Jongsma wrote:
> > This is part of a re-factoring that will de-couple the client window
> > from the remote display id.
> > ---
> > 
> > Changes from Fabiano's review
> > 
> >  src/virt-viewer-app.c | 18 ++++++++++++++++++
> >  1 file changed, 18 insertions(+)
> > 
> > diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
> > index b60ce2d..a0b1d76 100644
> > --- a/src/virt-viewer-app.c
> > +++ b/src/virt-viewer-app.c
> > @@ -109,6 +109,7 @@ struct _VirtViewerAppPrivate {
> >      VirtViewerWindow *main_window;
> >      GtkWidget *main_notebook;
> >      GHashTable *windows;
> > +    GHashTable *displays;
> >      GHashTable *initial_display_map;
> >      gchar *clipboard;
> >  
> > @@ -934,8 +935,14 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED,
> >      VirtViewerAppPrivate *priv = self->priv;
> >      VirtViewerWindow *window;
> >      gint nth;
> > +    gpointer key = NULL;
> 
> No need to null-ify it here, probably covscan would complain about that.

Hmm. Does coverity really complain about this? I find that very strings.
Many coding standards actually require all variables to be initialized
when they are defined, and this is my habit as well. (Perhaps this is
more common in the C++ world?) It seems to be a particularly good habit
to ensure that pointer variables are initialized, since using a NULL
pointer will generally cause a segfault that is easy to debug, whereas
using an uninitialized pointer will result in non-deterministic behavior
and/or memory corruption. If coverity does complain about this, is there
a way we can disable that particular warning? It seems like a useless
warning.

> >  
> >      g_object_get(display, "nth-display", &nth, NULL);
> > +
> > +    key = GINT_TO_POINTER(nth);
> > +    g_debug("Insert display %d %p", nth, display);
> > +    g_hash_table_insert(self->priv->displays, key, g_object_ref(display));
> 
> Actually, I would not even declare key, I would just do:
> g_hash_table_insert(self->priv->displays, GINT_TO_POINTER(nth),
> g_object_ref(display));
> 
> But it's up to you :-)
> 
> > +
> >      window = virt_viewer_app_get_nth_window(self, nth);
> >      if (window == NULL) {
> >          if (priv->kiosk) {
> > @@ -965,6 +972,7 @@ virt_viewer_app_display_removed(VirtViewerSession *session G_GNUC_UNUSED,
> >  
> >      gtk_widget_hide(GTK_WIDGET(display));
> >      g_object_get(display, "nth-display", &nth, NULL);
> > +    g_hash_table_remove(self->priv->displays, GINT_TO_POINTER(nth));
> >      win = virt_viewer_app_get_nth_window(self, nth);
> >      if (!win)
> >          return;
> > @@ -1636,6 +1644,15 @@ virt_viewer_app_dispose (GObject *object)
> >          g_hash_table_unref(tmp);
> >      }
> >  
> > +    if (priv->displays) {
> > +        GHashTable *tmp = priv->displays;
> > +        /* null-ify before unrefing, because we need
> > +         * to prevent callbacks using priv->displays
> > +         * while it is being disposed of. */
> > +        priv->displays = NULL;
> > +        g_hash_table_unref(tmp);
> > +    }
> > +
> >      g_clear_object(&priv->session);
> >      g_free(priv->title);
> >      priv->title = NULL;
> > @@ -1702,6 +1719,7 @@ virt_viewer_app_init (VirtViewerApp *self)
> >      virt_viewer_app_set_debug(opt_debug);
> >  
> >      self->priv = GET_PRIVATE(self);
> > +    self->priv->displays = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref);
> >      self->priv->windows = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_object_unref);
> >      self->priv->config = g_key_file_new();
> >      self->priv->config_file = g_build_filename(g_get_user_config_dir(),
> 
> ACK!
> 


_______________________________________________
virt-tools-list mailing list
virt-tools-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/virt-tools-list





[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux