Bug#689361: unblock: at-spi2-atk/2.5.3-2
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
Hello,
Please unblock package at-spi2-atk
unblock at-spi2-atk/2.5.3-2
Upstream has fixed a lot of reference leaks (which would translate into
memory leaks in applications, including long-running ones such as the
desktop). These are recorded in patches/leak*.
In addition, bug #688094 shows that at-spi2-atk leaves a lot of sockets
in the user's home directory, and even root-owned ones for gksu
applications. This is mitigated by the two upstream fixes recorded in
patches/socket*
Lastly, there are a couple translation updates in patches/lv and
patches/pl
Samuel
-- System Information:
Debian Release: wheezy/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.0.4 (SMP w/8 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
--
Samuel
<m> argh, pi est plus grand que 2. Ca casse tout
-+- #ens-mim -+-
diff -Nru at-spi2-atk-2.5.3/debian/changelog at-spi2-atk-2.5.3/debian/changelog
--- at-spi2-atk-2.5.3/debian/changelog 2012-06-29 04:35:37.000000000 +0200
+++ at-spi2-atk-2.5.3/debian/changelog 2012-09-30 17:46:16.000000000 +0200
@@ -1,3 +1,13 @@
+at-spi2-atk (2.5.3-2) unstable; urgency=low
+
+ * patches/leak*: Cherry-pick from upstream: fix reference leaks.
+ * patches/socket*: Cherry-pick from upstream: mitigate at-spi socket
+ creation. (Closes: #688094)
+ * patches/lv: Cherry-pick from upstream: lv translation update.
+ * patches/pl: Cherry-pick from upstream: pl translation update.
+
+ -- Samuel Thibault <sthibault@debian.org> Sun, 30 Sep 2012 16:28:06 +0200
+
at-spi2-atk (2.5.3-1) unstable; urgency=low
[ Samuel Thibault ]
diff -Nru at-spi2-atk-2.5.3/debian/patches/leak1 at-spi2-atk-2.5.3/debian/patches/leak1
--- at-spi2-atk-2.5.3/debian/patches/leak1 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/leak1 2012-09-30 17:30:26.000000000 +0200
@@ -0,0 +1,22 @@
+commit e4a899792e389b9d733f1a74702a8f4158f93acc
+Author: Cosimo Cecchi <cosimoc@gnome.org>
+Date: Mon Jul 2 16:14:12 2012 -0400
+
+ atk-adaptor: plug a refcount leak
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=679285
+
+diff --git a/atk-adaptor/adaptors/accessible-adaptor.c b/atk-adaptor/adaptors/accessible-adaptor.c
+index 25d7823..77aacbb 100644
+--- a/atk-adaptor/adaptors/accessible-adaptor.c
++++ b/atk-adaptor/adaptors/accessible-adaptor.c
+@@ -337,6 +337,8 @@ impl_GetRelationSet (DBusConnection * bus,
+ }
+ dbus_message_iter_close_container (&iter, &iter_array);
+ oom:
++ if (set)
++ g_object_unref (set);
+ // TODO: handle out of memory */
+ return reply;
+ }
+
diff -Nru at-spi2-atk-2.5.3/debian/patches/leak2 at-spi2-atk-2.5.3/debian/patches/leak2
--- at-spi2-atk-2.5.3/debian/patches/leak2 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/leak2 2012-09-30 17:30:31.000000000 +0200
@@ -0,0 +1,21 @@
+commit 246c99e7f62d5009d5bd4b09c491b74afddae9a6
+Author: Cosimo Cecchi <cosimoc@gnome.org>
+Date: Mon Jul 2 16:14:48 2012 -0400
+
+ atk-adaptor: plug a refcount leak
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=679285
+
+diff --git a/atk-adaptor/event.c b/atk-adaptor/event.c
+index d19f451..1cbda23 100644
+--- a/atk-adaptor/event.c
++++ b/atk-adaptor/event.c
+@@ -1017,6 +1017,7 @@ children_changed_event_listener (GSignalInvocationHint * signal_hint,
+ detail1);
+ emit_event (accessible, ITF_EVENT_OBJECT, name, minor, detail1, detail2,
+ "(so)", ao, append_object);
++ g_object_unref (ao);
+ }
+ else
+ {
+
diff -Nru at-spi2-atk-2.5.3/debian/patches/leak3 at-spi2-atk-2.5.3/debian/patches/leak3
--- at-spi2-atk-2.5.3/debian/patches/leak3 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/leak3 2012-09-30 17:30:34.000000000 +0200
@@ -0,0 +1,57 @@
+commit d1e52eb847dcabf7a2be07dbd71cfcb4e0805306
+Author: Cosimo Cecchi <cosimoc@gnome.org>
+Date: Thu Sep 13 13:37:50 2012 -0400
+
+ atk-adaptor: plug some refcount leaks
+
+ cache->add_traversal holds GObject references, so when we remove/pop
+ items from it, we should also drop the reference, unless it's transfered
+ to another queue.
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=683979
+
+diff --git a/atk-adaptor/accessible-cache.c b/atk-adaptor/accessible-cache.c
+index afaedb0..3a30b51 100644
+--- a/atk-adaptor/accessible-cache.c
++++ b/atk-adaptor/accessible-cache.c
+@@ -180,7 +180,10 @@ remove_object (GObject * source, GObject * gobj, gpointer data)
+ g_hash_table_remove (cache->objects, gobj);
+ }
+ else
+- g_queue_remove (cache->add_traversal, gobj);
++ {
++ g_queue_remove (cache->add_traversal, gobj);
++ g_object_unref (gobj);
++ }
+ }
+
+ static void
+@@ -277,12 +280,14 @@ add_pending_items (gpointer data)
+ while (!g_queue_is_empty (cache->add_traversal))
+ {
+ AtkStateSet *set;
+-
++
++ /* cache->add_traversal holds a ref to current */
+ current = g_queue_pop_head (cache->add_traversal);
+ set = atk_object_ref_state_set (current);
+
+ if (set && !atk_state_set_contains_state (set, ATK_STATE_TRANSIENT))
+ {
++ /* transfer the ref into to_add */
+ g_queue_push_tail (to_add, current);
+ if (!spi_cache_in (cache, G_OBJECT (current)) &&
+ !atk_state_set_contains_state (set, ATK_STATE_MANAGES_DESCENDANTS) &&
+@@ -291,6 +296,11 @@ add_pending_items (gpointer data)
+ append_children (current, cache->add_traversal);
+ }
+ }
++ else
++ {
++ /* drop the ref for the removed object */
++ g_object_unref (current);
++ }
+
+ if (set)
+ g_object_unref (set);
+
diff -Nru at-spi2-atk-2.5.3/debian/patches/leak4 at-spi2-atk-2.5.3/debian/patches/leak4
--- at-spi2-atk-2.5.3/debian/patches/leak4 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/leak4 2012-09-30 17:30:39.000000000 +0200
@@ -0,0 +1,46 @@
+commit 1b1fa3c23337e39eba5adfbf689302a9163d4c01
+Author: William Jon McCann <jmccann@redhat.com>
+Date: Fri Sep 14 16:39:58 2012 -0400
+
+ Don't leak strings
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=684077
+
+diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
+index e3056e9..738c10b 100644
+--- a/atk-adaptor/bridge.c
++++ b/atk-adaptor/bridge.c
+@@ -249,7 +249,9 @@ register_reply (DBusPendingCall *pending, void *user_data)
+ dbus_message_iter_next (&iter_struct);
+ dbus_message_iter_get_basic (&iter_struct, &obj_path);
+
++ g_free (app->desktop_name);
+ app->desktop_name = g_strdup (app_name);
++ g_free (app->desktop_path);
+ app->desktop_path = g_strdup (obj_path);
+ }
+ }
+@@ -275,8 +277,8 @@ register_application (SpiBridge * app)
+
+ /* These will be overridden when we get a reply, but in practice these
+ defaults should always be correct */
+- app->desktop_name = ATSPI_DBUS_NAME_REGISTRY;
+- app->desktop_path = ATSPI_DBUS_PATH_ROOT;
++ app->desktop_name = g_strdup (ATSPI_DBUS_NAME_REGISTRY);
++ app->desktop_path = g_strdup (ATSPI_DBUS_PATH_ROOT);
+
+ message = dbus_message_new_method_call (SPI_DBUS_NAME_REGISTRY,
+ ATSPI_DBUS_PATH_ROOT,
+@@ -339,6 +341,11 @@ deregister_application (SpiBridge * app)
+ g_free (app->app_tmp_dir);
+ app->app_tmp_dir = NULL;
+ }
++
++ g_free (app->desktop_name);
++ app->desktop_name = NULL;
++ g_free (app->desktop_path);
++ app->desktop_path = NULL;
+ }
+
+ /*---------------------------------------------------------------------------*/
+
diff -Nru at-spi2-atk-2.5.3/debian/patches/leak5 at-spi2-atk-2.5.3/debian/patches/leak5
--- at-spi2-atk-2.5.3/debian/patches/leak5 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/leak5 2012-09-30 17:30:44.000000000 +0200
@@ -0,0 +1,21 @@
+commit 5431ebbe7f471a01014236100ec803631dc3941b
+Author: William Jon McCann <jmccann@redhat.com>
+Date: Fri Sep 14 17:11:37 2012 -0400
+
+ Don't leak message
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=684077
+
+diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
+index 738c10b..a66f0e2 100644
+--- a/atk-adaptor/bridge.c
++++ b/atk-adaptor/bridge.c
+@@ -291,6 +291,7 @@ register_application (SpiBridge * app)
+ if (!dbus_connection_send_with_reply (app->bus, message, &pending, -1)
+ || !pending)
+ {
++ dbus_message_unref (message);
+ return FALSE;
+ }
+
+
diff -Nru at-spi2-atk-2.5.3/debian/patches/leak6 at-spi2-atk-2.5.3/debian/patches/leak6
--- at-spi2-atk-2.5.3/debian/patches/leak6 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/leak6 2012-09-30 17:30:49.000000000 +0200
@@ -0,0 +1,23 @@
+commit e1015608a0f79178be66220f17d1af5fab030bfa
+Author: William Jon McCann <jmccann@redhat.com>
+Date: Fri Sep 14 17:29:10 2012 -0400
+
+ Don't leak pending calls
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=684077
+
+diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
+index a66f0e2..99a6a36 100644
+--- a/atk-adaptor/bridge.c
++++ b/atk-adaptor/bridge.c
+@@ -291,6 +291,9 @@ register_application (SpiBridge * app)
+ if (!dbus_connection_send_with_reply (app->bus, message, &pending, -1)
+ || !pending)
+ {
++ if (pending)
++ dbus_pending_call_unref (pending);
++
+ dbus_message_unref (message);
+ return FALSE;
+ }
+
diff -Nru at-spi2-atk-2.5.3/debian/patches/leak7 at-spi2-atk-2.5.3/debian/patches/leak7
--- at-spi2-atk-2.5.3/debian/patches/leak7 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/leak7 2012-09-30 17:30:53.000000000 +0200
@@ -0,0 +1,26 @@
+commit da10ef8b744bf7b04d18bda4cead3a9d71548a3e
+Author: Mike Gorse <mgorse@suse.com>
+Date: Mon Sep 17 19:06:40 2012 -0500
+
+ Fix an errant g_object_unref
+
+ If an object is deregistered but not in the cache, then only unref it if
+ it was found in the queue of objects to be added (ie, it is possible
+ that it is leased, rather than queued to be cached, in which case it
+ should not be unrefed).
+
+diff --git a/atk-adaptor/accessible-cache.c b/atk-adaptor/accessible-cache.c
+index 3a30b51..be247e4 100644
+--- a/atk-adaptor/accessible-cache.c
++++ b/atk-adaptor/accessible-cache.c
+@@ -179,9 +179,8 @@ remove_object (GObject * source, GObject * gobj, gpointer data)
+ g_signal_emit (cache, cache_signals [OBJECT_REMOVED], 0, gobj);
+ g_hash_table_remove (cache->objects, gobj);
+ }
+- else
++ else if (g_queue_remove (cache->add_traversal, gobj))
+ {
+- g_queue_remove (cache->add_traversal, gobj);
+ g_object_unref (gobj);
+ }
+ }
diff -Nru at-spi2-atk-2.5.3/debian/patches/lv at-spi2-atk-2.5.3/debian/patches/lv
--- at-spi2-atk-2.5.3/debian/patches/lv 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/lv 2012-09-30 17:24:55.000000000 +0200
@@ -0,0 +1,28 @@
+commit c74fce065b40f0fb2e82bf740bf7f2744eda4466
+Author: Rūdolfs Mazurs <rudolfsm@src.gnome.org>
+Date: Sat Sep 1 00:09:41 2012 +0300
+
+ Updated Latvian translation
+
+diff --git a/po/lv.po b/po/lv.po
+index 2cde3f7..3bdca61 100644
+--- a/po/lv.po
++++ b/po/lv.po
+@@ -1,7 +1,7 @@
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+ # This file is distributed under the same license as the PACKAGE package.
+ #
+-# Rudolfs <rudolfs.mazurs@gmail.com>, 2011.
++# Rudolfs <rudolfs.mazurs@gmail.com>, 2011, 2012.
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: \n"
+@@ -21,7 +21,7 @@ msgstr ""
+ #: ../atk-adaptor/bridge.c:538
+ #, c-format
+ msgid "atk-bridge: Couldn't listen on dbus server: %s"
+-msgstr "atk-bridge: neizdevās klausīties uz dbus servera: %s"
++msgstr "atk-bridge: neizdevās klausīties dbus serveri — %s"
+
+ #~ msgid "Enable DBus-based AT-SPI infrastructure"
+ #~ msgstr "Ieslēgt AT-SPI infrastruktūru uz DBus- pamata"
diff -Nru at-spi2-atk-2.5.3/debian/patches/pl at-spi2-atk-2.5.3/debian/patches/pl
--- at-spi2-atk-2.5.3/debian/patches/pl 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/pl 2012-09-30 17:24:55.000000000 +0200
@@ -0,0 +1,20 @@
+commit 8149343f5034b1aca8d25db4ea24507f2fd9f06a
+Author: Piotr Drąg <piotrdrag@gmail.com>
+Date: Sat Sep 1 20:50:35 2012 +0200
+
+ Updated Polish translation
+
+diff --git a/po/pl.po b/po/pl.po
+index 2af1133..d9f1b83 100644
+--- a/po/pl.po
++++ b/po/pl.po
+@@ -4,6 +4,9 @@
+ # pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
+ # gnomepl@aviary.pl
+ # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
++# Artur Flinta <aflinta@at.kernel.pl>, 2003.
++# Piotr Drąg <piotrdrag@gmail.com>, 2010-2011.
++# Aviary.pl <gnomepl@aviary.pl>, 2010-2011.
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: at-spi2-atk\n"
diff -Nru at-spi2-atk-2.5.3/debian/patches/series at-spi2-atk-2.5.3/debian/patches/series
--- at-spi2-atk-2.5.3/debian/patches/series 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/series 2012-09-30 17:31:24.000000000 +0200
@@ -0,0 +1,11 @@
+leak1
+leak2
+leak3
+leak4
+leak5
+leak6
+leak7
+socket1
+socket2
+lv
+pl
diff -Nru at-spi2-atk-2.5.3/debian/patches/socket1 at-spi2-atk-2.5.3/debian/patches/socket1
--- at-spi2-atk-2.5.3/debian/patches/socket1 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/socket1 2012-09-30 17:31:11.000000000 +0200
@@ -0,0 +1,49 @@
+commit 7fc3c0ed67c52371855c5db456f26f27dfd22126
+Author: Mike Gorse <mgorse@suse.com>
+Date: Tue Jul 3 20:52:25 2012 -0500
+
+ Don't create a sub-directory for the socket when running as root
+
+ If an application is running as root but within a user's runtime directory,
+ then creating a temporary directory will result in the directory being owned
+ by root, and the user will not have permission to search the directory to
+ access the socket, so an AT running as the normal user will not be able to
+ connect to the application running as root.
+ Fixes regression introduced by the fix for BGO#678348.
+
+diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
+index 8c9d6bc..9880639 100644
+--- a/atk-adaptor/bridge.c
++++ b/atk-adaptor/bridge.c
+@@ -298,15 +298,23 @@ register_application (SpiBridge * app)
+ dbus_message_unref (message);
+
+ #ifndef DISABLE_P2P
+- app->app_tmp_dir = g_build_filename (g_get_user_runtime_dir (),
+- "at-spi2-XXXXXX", NULL);
+- if (!g_mkdtemp (app->app_tmp_dir))
++ if (getuid () != 0)
+ {
+- g_free (app->app_tmp_dir);
+- app->app_tmp_dir = NULL;
+- return FALSE;
++ app->app_tmp_dir = g_build_filename (g_get_user_runtime_dir (),
++ "at-spi2-XXXXXX", NULL);
++ if (!g_mkdtemp (app->app_tmp_dir))
++ {
++ g_free (app->app_tmp_dir);
++ app->app_tmp_dir = NULL;
++ return FALSE;
++ }
+ }
+- app->app_bus_addr = g_strdup_printf ("unix:path=%s/socket", app->app_tmp_dir);
++
++ if (app->app_tmp_dir)
++ app->app_bus_addr = g_strdup_printf ("unix:path=%s/socket", app->app_tmp_dir);
++ else
++ app->app_bus_addr = g_strdup_printf ("unix:path=%s/at-spi2-socket-%d",
++ g_get_user_runtime_dir (), getpid ());
+ #endif
+
+ return TRUE;
+
diff -Nru at-spi2-atk-2.5.3/debian/patches/socket2 at-spi2-atk-2.5.3/debian/patches/socket2
--- at-spi2-atk-2.5.3/debian/patches/socket2 1970-01-01 01:00:00.000000000 +0100
+++ at-spi2-atk-2.5.3/debian/patches/socket2 2012-09-30 17:31:16.000000000 +0200
@@ -0,0 +1,174 @@
+commit 6fbb1ba2c5281706525ae93bd78ee6cd1f1c9bc8
+Author: Mike Gorse <mgorse@suse.com>
+Date: Thu Jul 5 19:58:43 2012 -0500
+
+ Only create a directory and a socket when requested
+
+ Currently, atk-bridge clutters XDG_RUNTIME_DIR with directories for sockets,
+ which is especially annoying since gtk currently does not call
+ atk_bridge_adaptor_cleanup, so the directories never go away. This change does
+ not really solve the problem--it only hides it from users who do not really
+ need AT-SPI--but, nevertheless, there is no reason to create a directory or a
+ socket if nothing has requested it, so doing this lazily makes sense.
+
+diff --git a/atk-adaptor/adaptors/application-adaptor.c b/atk-adaptor/adaptors/application-adaptor.c
+index dc2231d..260a4d7 100644
+--- a/atk-adaptor/adaptors/application-adaptor.c
++++ b/atk-adaptor/adaptors/application-adaptor.c
+@@ -104,6 +104,9 @@ DBusMessage *reply;
+ if (bus == spi_global_app_data->bus)
+ spi_atk_add_client (dbus_message_get_sender (msg));
+
++ if (!spi_global_app_data->app_bus_addr)
++ spi_atk_create_socket (spi_global_app_data);
++
+ reply = dbus_message_new_method_return(msg);
+ if (reply)
+ {
+diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
+index 9880639..08dfbd4 100644
+--- a/atk-adaptor/bridge.c
++++ b/atk-adaptor/bridge.c
+@@ -297,26 +297,6 @@ register_application (SpiBridge * app)
+ if (message)
+ dbus_message_unref (message);
+
+-#ifndef DISABLE_P2P
+- if (getuid () != 0)
+- {
+- app->app_tmp_dir = g_build_filename (g_get_user_runtime_dir (),
+- "at-spi2-XXXXXX", NULL);
+- if (!g_mkdtemp (app->app_tmp_dir))
+- {
+- g_free (app->app_tmp_dir);
+- app->app_tmp_dir = NULL;
+- return FALSE;
+- }
+- }
+-
+- if (app->app_tmp_dir)
+- app->app_bus_addr = g_strdup_printf ("unix:path=%s/socket", app->app_tmp_dir);
+- else
+- app->app_bus_addr = g_strdup_printf ("unix:path=%s/at-spi2-socket-%d",
+- g_get_user_runtime_dir (), getpid ());
+-#endif
+-
+ return TRUE;
+ }
+
+@@ -539,37 +519,6 @@ new_connection_cb (DBusServer *server, DBusConnection *con, void *data)
+ spi_global_app_data->direct_connections = g_list_append (spi_global_app_data->direct_connections, con);
+ }
+
+-static int
+-setup_bus (void)
+-{
+-#ifndef DISABLE_P2P
+- DBusServer *server;
+- DBusError err;
+-
+- if (!spi_global_app_data->app_bus_addr)
+- return -1;
+-
+- dbus_error_init(&err);
+- server = dbus_server_listen(spi_global_app_data->app_bus_addr, &err);
+- if (server == NULL)
+- {
+- g_warning ("atk-bridge: Couldn't listen on dbus server: %s", err.message);
+- dbus_error_init (&err);
+- spi_global_app_data->app_bus_addr [0] = '\0';
+- g_main_context_unref (spi_global_app_data->main_context);
+- spi_global_app_data->main_context = NULL;
+- return -1;
+- }
+-
+- atspi_dbus_server_setup_with_g_main(server, NULL);
+- dbus_server_set_new_connection_function(server, new_connection_cb, NULL, NULL);
+-
+- spi_global_app_data->server = server;
+-#endif
+-
+- return 0;
+-}
+-
+
+ gchar *atspi_dbus_name = NULL;
+ static gboolean atspi_no_register = FALSE;
+@@ -724,6 +673,55 @@ signal_filter (DBusConnection *bus, DBusMessage *message, void *user_data)
+ return result;
+ }
+
++int
++spi_atk_create_socket (SpiBridge *app)
++{
++#ifndef DISABLE_P2P
++ DBusServer *server;
++ DBusError err;
++
++ if (getuid () != 0)
++ {
++ app->app_tmp_dir = g_build_filename (g_get_user_runtime_dir (),
++ "at-spi2-XXXXXX", NULL);
++ if (!g_mkdtemp (app->app_tmp_dir))
++ {
++ g_free (app->app_tmp_dir);
++ app->app_tmp_dir = NULL;
++ return FALSE;
++ }
++ }
++
++ if (app->app_tmp_dir)
++ app->app_bus_addr = g_strdup_printf ("unix:path=%s/socket", app->app_tmp_dir);
++ else
++ app->app_bus_addr = g_strdup_printf ("unix:path=%s/at-spi2-socket-%d",
++ g_get_user_runtime_dir (), getpid ());
++
++ if (!spi_global_app_data->app_bus_addr)
++ return -1;
++
++ dbus_error_init(&err);
++ server = dbus_server_listen(spi_global_app_data->app_bus_addr, &err);
++ if (server == NULL)
++ {
++ g_warning ("atk-bridge: Couldn't listen on dbus server: %s", err.message);
++ dbus_error_init (&err);
++ spi_global_app_data->app_bus_addr [0] = '\0';
++ g_main_context_unref (spi_global_app_data->main_context);
++ spi_global_app_data->main_context = NULL;
++ return -1;
++ }
++
++ atspi_dbus_server_setup_with_g_main(server, NULL);
++ dbus_server_set_new_connection_function(server, new_connection_cb, NULL, NULL);
++
++ spi_global_app_data->server = server;
++#endif
++
++ return 0;
++}
++
+ /*
+ * Checks the status of the environment variables
+ *
+@@ -896,8 +894,6 @@ atk_bridge_adaptor_init (gint * argc, gchar ** argv[])
+ else
+ get_registered_event_listeners (spi_global_app_data);
+
+- setup_bus();
+-
+ return 0;
+ }
+
+diff --git a/atk-adaptor/bridge.h b/atk-adaptor/bridge.h
+index 2a79c6d..ddc79f5 100644
+--- a/atk-adaptor/bridge.h
++++ b/atk-adaptor/bridge.h
+@@ -70,6 +70,8 @@ extern SpiBridge *spi_global_app_data;
+ void spi_atk_add_client (const char *bus_name);
+ void spi_atk_remove_client (const char *bus_name);
+
++int spi_atk_create_socket (SpiBridge *app);
++
+ G_END_DECLS
+
+ #endif /* BRIDGE_H */
Reply to: