bridge: drive-by list usage fixes
authorRay Strode <rstrode@redhat.com>
Sat, 21 Jan 2012 11:06:27 +0000 (05:06 -0600)
committerMike Gorse <mgorse@linux-l2tz.site>
Sat, 21 Jan 2012 11:06:27 +0000 (05:06 -0600)
There are a few places where the glib list apis
aren't being used right:

1) There is code that use GList functions on GSLists
2) There is code that uses the list node itself instead
   of the node data
3) There is code that removes nodes from a list as its iterating
   over that list.

https://bugzilla.gnome.org/show_bug.cgi?id=659967

atk-adaptor/bridge.c

index 3d10e9ba2a4f6c6ec465bfbbd4f7fafc5cf0af67..08e72fc269ff37ac2a1990b2ed0c31ab9628fccf 100644 (file)
@@ -975,14 +975,18 @@ gnome_accessibility_module_shutdown (void)
 
   for (l = spi_global_app_data->direct_connections; l; l = l->next)
     {
-      droute_context_unregister (spi_global_app_data->droute, l->data);
-      droute_unintercept_dbus (l->data);
-      dbus_connection_unref (l->data);
+      DBusConnection *connection;
+
+      connection = l->data;
+
+      droute_context_unregister (spi_global_app_data->droute, connection);
+      droute_unintercept_dbus (connection);
+      dbus_connection_unref (connection);
     }
   g_list_free (spi_global_app_data->direct_connections);
 
   for (ls = clients; ls; ls = ls->next)
-     g_free (l->data);
+    g_free (l->data);
   g_slist_free (clients);
   clients = NULL;
 
@@ -1031,19 +1035,25 @@ void
 spi_atk_remove_client (const char *bus_name)
 {
   GSList *l;
+  GSList *next_node;
 
-  for (l = clients; l; l = l->next)
+  l = clients;
+  while (l)
   {
+    next_node = l->next;
+
     if (!g_strcmp0 (l->data, bus_name))
     {
       gchar *match = g_strdup_printf (name_match_tmpl, l->data);
       dbus_bus_remove_match (spi_global_app_data->bus, match, NULL);
   g_free (match);
       g_free (l->data);
-      clients = g_slist_remove_link (clients, l);
+      clients = g_slist_delete_link (clients, l);
       if (!clients)
         spi_atk_deregister_event_listeners ();
     }
+
+    l = next_node;
   }
 }