freeze break request: fix at-spi2-atk crashes/warnings (BGO#684434)



Hi all,

atk_bridge_adaptor_cleanup has a couple of problems that can cause crashes/aborts when a gtk+ application exits. It tries to free the wrong pointer, causing a crash (see https://bugzilla.gnome.org/show_bug.cgi?id=684434). It also derefernces libdbus connections without closing them, causing a SIGABRT if an AT is running.

While testing this, I also found that, if an AT is running, then a DBusObjectPath is deregistered without having ever been registered, resulting in libdbus printing a warning, so I would like to fix this as well; I have attached a fix as a separate patch. It is a regression that I introduced recently when delaying initialization of the cache so that it will only be initialized when an AT is running.

Thanks,
-Mike
From b3210d247daa9480d3037bac4d7cc1963883abea Mon Sep 17 00:00:00 2001
From: Mike Gorse <mgorse suse com>
Date: Thu, 20 Sep 2012 13:26:12 -0500
Subject: [PATCH 1/2] Fix crashes in atk_bridge_adaptor_cleanup

When freeing data, atk_bridge_adaptor_cleanup frees the wrong pointer,
resulting in a crash. Also, we need to close D-Bus connections before
removing the last reference, or libdbus will abort.

https://bugzilla.gnome.org/show_bug.cgi?id=684434
---
 atk-adaptor/bridge.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
index 99a6a36..74f0431 100644
--- a/atk-adaptor/bridge.c
+++ b/atk-adaptor/bridge.c
@@ -963,13 +963,14 @@ atk_bridge_adaptor_cleanup (void)
 
       droute_context_unregister (spi_global_app_data->droute, connection);
       droute_unintercept_dbus (connection);
+      dbus_connection_close (connection);
       dbus_connection_unref (connection);
     }
   g_list_free (spi_global_app_data->direct_connections);
   spi_global_app_data->direct_connections = NULL;
 
   for (ls = clients; ls; ls = ls->next)
-    g_free (l->data);
+    g_free (ls->data);
   g_slist_free (clients);
   clients = NULL;
 
-- 
1.7.10.4

From d7489952dbe62aa4b7b6eaa2c993e2154a576783 Mon Sep 17 00:00:00 2001
From: Mike Gorse <mgorse suse com>
Date: Thu, 20 Sep 2012 13:28:00 -0500
Subject: [PATCH 2/2] Register the cache on the main D-Bus connection

In atk_bridge_adaptor_cleanup, droute will deregister the cache object
path from the main DBusConnection, causing libdbus to complain since it
was not registered. Fixes a regression introduced when deferring
registration of the cache.
---
 atk-adaptor/bridge.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
index 74f0431..2df9889 100644
--- a/atk-adaptor/bridge.c
+++ b/atk-adaptor/bridge.c
@@ -781,6 +781,8 @@ spi_atk_activate ()
           return;
         }
       spi_initialize_cache (treepath);
+      if (spi_global_app_data->bus)
+        droute_path_register (treepath, spi_global_app_data->bus);
     }
 }
 
-- 
1.7.10.4



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