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

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: