Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package at-spi2-core for openSUSE:Factory 
checked in at 2026-09-19 22:19:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/at-spi2-core (Old)
 and      /work/SRC/openSUSE:Factory/.at-spi2-core.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "at-spi2-core"

Sat Sep 19 22:19:35 2026 rev:129 rq:1378743 version:2.60.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/at-spi2-core/at-spi2-core.changes        
2026-08-09 21:32:18.535982963 +0200
+++ /work/SRC/openSUSE:Factory/.at-spi2-core.new.383539/at-spi2-core.changes    
2026-09-19 22:19:44.060086185 +0200
@@ -1,0 +2,8 @@
+Wed Sep 16 15:25:57 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 2.60.7:
+  + libatspi: Fix transfer annotation on
+    atspi_document_get_text_selections.
+  + atk-bridge: Release disconnected direct connections.
+
+-------------------------------------------------------------------

Old:
----
  at-spi2-core-2.60.6.tar.xz

New:
----
  at-spi2-core-2.60.7.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ at-spi2-core.spec ++++++
--- /var/tmp/diff_new_pack.6fdwqT/_old  2026-09-19 22:19:45.251135462 +0200
+++ /var/tmp/diff_new_pack.6fdwqT/_new  2026-09-19 22:19:45.253135544 +0200
@@ -23,7 +23,7 @@
 %define atspiconfdir %{?_distconfdir}%{!?_distconfdir:%{_sysconfdir}}
 
 Name:           at-spi2-core
-Version:        2.60.6
+Version:        2.60.7
 Release:        0
 Summary:        Assistive Technology Service Provider Interface - D-Bus based 
implementation
 License:        LGPL-2.1-or-later

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.6fdwqT/_old  2026-09-19 22:19:45.282136744 +0200
+++ /var/tmp/diff_new_pack.6fdwqT/_new  2026-09-19 22:19:45.285136868 +0200
@@ -1,6 +1,7 @@
-mtime: 1785657245
-commit: 95c3aca3ba19c83013429728ccbd7be3f2dafffb9b92ad7d4688304870052066
+mtime: 1789572453
+commit: fe6945d05b32b761ffd3831f3742bd6bf5407288008c67cc575e4c9669dc3415
 url: https://src.opensuse.org/GNOME/at-spi2-core
-revision: 95c3aca3ba19c83013429728ccbd7be3f2dafffb9b92ad7d4688304870052066
+revision: fe6945d05b32b761ffd3831f3742bd6bf5407288008c67cc575e4c9669dc3415
+trackingbranch: factory
 projectscmsync: https://src.opensuse.org/GNOME/_ObsPrj
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.6fdwqT/_old  2026-09-19 22:19:45.300137489 +0200
+++ /var/tmp/diff_new_pack.6fdwqT/_new  2026-09-19 22:19:45.305137696 +0200
@@ -3,7 +3,7 @@
   <service name="obs_scm" mode="manual">
     <param name="scm">git</param>
     <param name="url">https://gitlab.gnome.org/GNOME/at-spi2-core.git</param>
-    <param name="revision">2.60.6</param>
+    <param name="revision">2.60.7</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ at-spi2-core-2.60.6.tar.xz -> at-spi2-core-2.60.7.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/at-spi2-core-2.60.6/NEWS new/at-spi2-core-2.60.7/NEWS
--- old/at-spi2-core-2.60.6/NEWS        2026-07-31 20:32:41.000000000 +0200
+++ new/at-spi2-core-2.60.7/NEWS        2026-09-16 17:18:14.000000000 +0200
@@ -1,3 +1,9 @@
+What's new in at-spi2-core 2.60.7:
+
+* libatspi: Fix transfer annotation on atspi_document_get_text_selections.
+
+* atk-bridge: Release disconnected direct connections.
+
 What's new in at-spi2-core 2.60.6:
 
 * atk-bridge: Attempt to fix a crash in get_registered_event_listeners
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/at-spi2-core-2.60.6/atk-adaptor/bridge.c 
new/at-spi2-core-2.60.7/atk-adaptor/bridge.c
--- old/at-spi2-core-2.60.6/atk-adaptor/bridge.c        2026-07-31 
20:32:41.000000000 +0200
+++ new/at-spi2-core-2.60.7/atk-adaptor/bridge.c        2026-09-16 
17:18:14.000000000 +0200
@@ -681,15 +681,51 @@
 }
 
 static void
+remove_direct_connection (DBusConnection *connection)
+{
+  GList *link;
+
+  link = g_list_find (spi_global_app_data->direct_connections, connection);
+  if (!link)
+    return;
+
+  droute_context_unregister (spi_global_app_data->droute, connection);
+  droute_unintercept_dbus (connection);
+  spi_global_app_data->direct_connections =
+      g_list_delete_link (spi_global_app_data->direct_connections, link);
+  dbus_connection_unref (connection);
+}
+
+static DBusHandlerResult
+direct_connection_filter (DBusConnection *connection,
+                          DBusMessage *message,
+                          void *user_data)
+{
+  if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected"))
+    {
+      dbus_connection_remove_filter (connection,
+                                     direct_connection_filter,
+                                     NULL);
+      remove_direct_connection (connection);
+    }
+
+  return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static void
 new_connection_cb (DBusServer *server, DBusConnection *con, void *data)
 {
   dbus_connection_set_unix_user_function (con, user_check, NULL, NULL);
+  if (!dbus_connection_add_filter (con, direct_connection_filter, NULL, NULL))
+    return;
+
   dbus_connection_ref (con);
   atspi_dbus_connection_setup_with_g_main (con, spi_context);
   droute_intercept_dbus (con);
   droute_context_register (spi_global_app_data->droute, con);
 
-  spi_global_app_data->direct_connections = g_list_append 
(spi_global_app_data->direct_connections, con);
+  spi_global_app_data->direct_connections =
+      g_list_append (spi_global_app_data->direct_connections, con);
 }
 
 static gchar *atspi_dbus_name = NULL;
@@ -1314,7 +1350,6 @@
 void
 atk_bridge_adaptor_cleanup (void)
 {
-  GList *l;
   GSList *ls;
 
   if (!inited)
@@ -1330,19 +1365,18 @@
 
   deactivate_bus ();
 
-  for (l = spi_global_app_data->direct_connections; l; l = l->next)
+  while (spi_global_app_data->direct_connections)
     {
       DBusConnection *connection;
 
-      connection = l->data;
+      connection = spi_global_app_data->direct_connections->data;
 
-      droute_context_unregister (spi_global_app_data->droute, connection);
-      droute_unintercept_dbus (connection);
+      dbus_connection_remove_filter (connection,
+                                     direct_connection_filter,
+                                     NULL);
       dbus_connection_close (connection);
-      dbus_connection_unref (connection);
+      remove_direct_connection (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 (ls->data);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/at-spi2-core-2.60.6/atspi/atspi-document.c 
new/at-spi2-core-2.60.7/atspi/atspi-document.c
--- old/at-spi2-core-2.60.6/atspi/atspi-document.c      2026-07-31 
20:32:41.000000000 +0200
+++ new/at-spi2-core-2.60.7/atspi/atspi-document.c      2026-09-16 
17:18:14.000000000 +0200
@@ -23,6 +23,27 @@
 
 #include "atspi-private.h"
 
+static AtspiTextSelection *
+atspi_text_selection_copy (AtspiTextSelection *src)
+{
+  AtspiTextSelection *dst = g_new (AtspiTextSelection, 1);
+  dst->start_object = g_object_ref (src->start_object);
+  dst->start_offset = src->start_offset;
+  dst->end_object = g_object_ref (src->end_object);
+  dst->end_offset = src->end_offset;
+  return dst;
+}
+
+static void
+atspi_text_selection_free (AtspiTextSelection *selection)
+{
+  g_clear_object (&selection->start_object);
+  g_clear_object (&selection->end_object);
+  g_free (selection);
+}
+
+G_DEFINE_BOXED_TYPE (AtspiTextSelection, atspi_text_selection, 
atspi_text_selection_copy, atspi_text_selection_free)
+
 /**
  * atspi_document_get_locale:
  * @obj: a pointer to the #AtspiDocument object on which to operate.
@@ -187,7 +208,7 @@
  *
  * Returns an array of AtspiTextSelections within this document.
  *
- * Returns: (element-type AtspiTextSelection) (transfer full): a GArray of
+ * Returns: (element-type AtspiTextSelection) (transfer container): a GArray of
  * AtspiTextSelection structures representing the selection.
  *
  * Since: 2.52
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/at-spi2-core-2.60.6/atspi/atspi-document.h 
new/at-spi2-core-2.60.7/atspi/atspi-document.h
--- old/at-spi2-core-2.60.6/atspi/atspi-document.h      2026-07-31 
20:32:41.000000000 +0200
+++ new/at-spi2-core-2.60.7/atspi/atspi-document.h      2026-09-16 
17:18:14.000000000 +0200
@@ -81,6 +81,15 @@
   gboolean start_is_active;
 };
 
+/**
+ * ATSPI_TYPE_TEXT_SELECTION:
+ *
+ * The #GType for a boxed type holding a text selection within a document.
+ */
+#define ATSPI_TYPE_TEXT_SELECTION atspi_text_selection_get_type ()
+
+GType atspi_text_selection_get_type ();
+
 struct _AtspiDocument
 {
   GTypeInterface parent;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/at-spi2-core-2.60.6/meson.build 
new/at-spi2-core-2.60.7/meson.build
--- old/at-spi2-core-2.60.6/meson.build 2026-07-31 20:32:41.000000000 +0200
+++ new/at-spi2-core-2.60.7/meson.build 2026-09-16 17:18:14.000000000 +0200
@@ -1,5 +1,5 @@
 project('at-spi2-core', 'c',
-        version: '2.60.6',
+        version: '2.60.7',
         license: 'LGPLv2.1+',
         default_options: [
           'buildtype=debugoptimized',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/at-spi2-core-2.60.6/tests/at-spi2-atk/meson.build 
new/at-spi2-core-2.60.7/tests/at-spi2-atk/meson.build
--- old/at-spi2-core-2.60.6/tests/at-spi2-atk/meson.build       2026-07-31 
20:32:41.000000000 +0200
+++ new/at-spi2-core-2.60.7/tests/at-spi2-atk/meson.build       2026-09-16 
17:18:14.000000000 +0200
@@ -79,4 +79,16 @@
   endif
 endforeach
 
+direct_connection_test_bin = executable(
+  'direct-connection-test',
+  'test-direct-connection.c',
+  dependencies: gio_dep,
+  c_args: [
+    '-DTESTS_BUILD_DIR="@0@"'.format(meson.current_build_dir()),
+    '-DTESTS_DATA_DIR="@0@"'.format(join_paths(meson.current_source_dir(), 
'data')),
+  ],
+)
+
+test('direct-connection', direct_connection_test_bin, timeout: 30)
+
 test('atk-test', atk_test_bin, timeout: 300)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/at-spi2-core-2.60.6/tests/at-spi2-atk/test-direct-connection.c 
new/at-spi2-core-2.60.7/tests/at-spi2-atk/test-direct-connection.c
--- old/at-spi2-core-2.60.6/tests/at-spi2-atk/test-direct-connection.c  
1970-01-01 01:00:00.000000000 +0100
+++ new/at-spi2-core-2.60.7/tests/at-spi2-atk/test-direct-connection.c  
2026-09-16 17:18:14.000000000 +0200
@@ -0,0 +1,296 @@
+/*
+ * AT-SPI - Assistive Technology Service Provider Interface
+ *
+ * Copyright 2026 Azamat Almazbek uulu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ */
+
+#include <gio/gio.h>
+#include <glib.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#define TEST_APP_NAME "org.a11y.atspi.test.DirectConnection"
+#define ATSPI_ROOT_PATH "/org/a11y/atspi/accessible/root"
+#define ATSPI_APPLICATION_INTERFACE "org.a11y.atspi.Application"
+
+static guint
+count_pidfds (GPid pid)
+{
+  g_autofree gchar *directory_path = NULL;
+  g_autoptr (GDir) directory = NULL;
+  const gchar *entry;
+  guint count = 0;
+
+  directory_path = g_strdup_printf ("/proc/%d/fd", pid);
+  directory = g_dir_open (directory_path, 0, NULL);
+  if (!directory)
+    return 0;
+
+  while ((entry = g_dir_read_name (directory)))
+    {
+      g_autofree gchar *fd_path = g_build_filename (directory_path, entry, 
NULL);
+      g_autofree gchar *target = g_file_read_link (fd_path, NULL);
+
+      if (g_strcmp0 (target, "anon_inode:[pidfd]") == 0)
+        count++;
+    }
+
+  return count;
+}
+
+static gboolean
+wait_for_pidfd_count (GPid pid, guint expected)
+{
+  gint64 deadline = g_get_monotonic_time () + (2 * G_TIME_SPAN_SECOND);
+
+  do
+    {
+      if (count_pidfds (pid) == expected)
+        return TRUE;
+      g_usleep (10 * 1000);
+    }
+  while (g_get_monotonic_time () < deadline);
+
+  return FALSE;
+}
+
+static gboolean
+wait_for_pidfd_increase (GPid pid, guint baseline)
+{
+  gint64 deadline = g_get_monotonic_time () + (2 * G_TIME_SPAN_SECOND);
+
+  do
+    {
+      if (count_pidfds (pid) > baseline)
+        return TRUE;
+      g_usleep (10 * 1000);
+    }
+  while (g_get_monotonic_time () < deadline);
+
+  return FALSE;
+}
+
+static gchar *
+get_accessibility_bus_address (void)
+{
+  g_autoptr (GDBusConnection) session_bus = NULL;
+  g_autoptr (GVariant) reply = NULL;
+  g_autoptr (GError) error = NULL;
+  const gchar *address;
+
+  session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+  if (!session_bus)
+    g_error ("Failed to connect to session bus: %s", error->message);
+
+  reply = g_dbus_connection_call_sync (session_bus,
+                                       "org.a11y.Bus",
+                                       "/org/a11y/bus",
+                                       "org.a11y.Bus",
+                                       "GetAddress",
+                                       NULL,
+                                       G_VARIANT_TYPE ("(s)"),
+                                       G_DBUS_CALL_FLAGS_NONE,
+                                       -1,
+                                       NULL,
+                                       &error);
+  if (!reply)
+    g_error ("Failed to get accessibility bus address: %s", error->message);
+
+  g_variant_get (reply, "(&s)", &address);
+  return g_strdup (address);
+}
+
+static gchar *
+wait_for_application_address (GDBusConnection *accessibility_bus)
+{
+  guint attempt;
+
+  for (attempt = 0; attempt < 100; attempt++)
+    {
+      g_autoptr (GVariant) reply = NULL;
+      g_autoptr (GError) error = NULL;
+      const gchar *address;
+
+      reply = g_dbus_connection_call_sync (accessibility_bus,
+                                           TEST_APP_NAME,
+                                           ATSPI_ROOT_PATH,
+                                           ATSPI_APPLICATION_INTERFACE,
+                                           "GetApplicationBusAddress",
+                                           NULL,
+                                           G_VARIANT_TYPE ("(s)"),
+                                           G_DBUS_CALL_FLAGS_NONE,
+                                           100,
+                                           NULL,
+                                           &error);
+      if (reply)
+        {
+          g_variant_get (reply, "(&s)", &address);
+          return g_strdup (address);
+        }
+
+      g_usleep (10 * 1000);
+    }
+
+  return NULL;
+}
+
+static GDBusConnection *
+open_direct_connection (const gchar *address, GError **error)
+{
+  return g_dbus_connection_new_for_address_sync (
+      address,
+      G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
+      NULL,
+      NULL,
+      error);
+}
+
+static gboolean
+query_direct_connection (GDBusConnection *connection, GError **error)
+{
+  g_autoptr (GVariant) reply = NULL;
+
+  reply = g_dbus_connection_call_sync (connection,
+                                       NULL,
+                                       ATSPI_ROOT_PATH,
+                                       ATSPI_APPLICATION_INTERFACE,
+                                       "GetApplicationBusAddress",
+                                       NULL,
+                                       G_VARIANT_TYPE ("(s)"),
+                                       G_DBUS_CALL_FLAGS_NONE,
+                                       -1,
+                                       NULL,
+                                       error);
+  return reply != NULL;
+}
+
+static void
+test_direct_connection_is_released (void)
+{
+  g_autofree gchar *accessibility_bus_address = NULL;
+  g_autofree gchar *application_address = NULL;
+  g_autoptr (GDBusConnection) accessibility_bus = NULL;
+  g_autoptr (GDBusConnection) direct_connection = NULL;
+  g_autoptr (GError) error = NULL;
+  gchar *app_argv[] = {
+    TESTS_BUILD_DIR "/app-test",
+    "--test-data-file",
+    TESTS_DATA_DIR "/test.xml",
+    "--atspi-dbus-name",
+    TEST_APP_NAME,
+    NULL,
+  };
+  GPid app_pid = 0;
+  guint baseline;
+  guint iteration;
+
+  accessibility_bus_address = get_accessibility_bus_address ();
+  accessibility_bus = g_dbus_connection_new_for_address_sync (
+      accessibility_bus_address,
+      G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT |
+          G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
+      NULL,
+      NULL,
+      &error);
+  if (!accessibility_bus)
+    g_error ("Failed to connect to accessibility bus: %s", error->message);
+
+  if (!g_spawn_async (NULL,
+                      app_argv,
+                      NULL,
+                      G_SPAWN_DO_NOT_REAP_CHILD,
+                      NULL,
+                      NULL,
+                      &app_pid,
+                      &error))
+    g_error ("Failed to start test application: %s", error->message);
+
+  application_address = wait_for_application_address (accessibility_bus);
+  if (!application_address)
+    {
+      g_test_fail_printf ("Test application did not publish its direct bus 
address");
+      goto out;
+    }
+
+  baseline = count_pidfds (app_pid);
+  direct_connection = open_direct_connection (application_address, &error);
+  if (!direct_connection)
+    {
+      g_test_fail_printf ("Failed to open direct connection: %s", 
error->message);
+      goto out;
+    }
+
+  if (!query_direct_connection (direct_connection, &error))
+    {
+      g_test_fail_printf ("Failed to query direct connection: %s", 
error->message);
+      goto out;
+    }
+
+  if (!wait_for_pidfd_increase (app_pid, baseline))
+    {
+      g_test_skip ("libdbus does not retain peer credentials in a pidfd");
+      goto out;
+    }
+
+  if (!g_dbus_connection_close_sync (direct_connection, NULL, &error))
+    {
+      g_test_fail_printf ("Failed to close direct connection: %s", 
error->message);
+      goto out;
+    }
+  g_clear_object (&direct_connection);
+
+  if (!wait_for_pidfd_count (app_pid, baseline))
+    {
+      g_test_fail_printf ("Direct connection pidfd was not released");
+      goto out;
+    }
+
+  for (iteration = 0; iteration < 10; iteration++)
+    {
+      direct_connection = open_direct_connection (application_address, &error);
+      if (!direct_connection)
+        {
+          g_test_fail_printf ("Failed to open direct connection: %s", 
error->message);
+          goto out;
+        }
+
+      if (!query_direct_connection (direct_connection, &error))
+        {
+          g_test_fail_printf ("Failed to query direct connection: %s",
+                              error->message);
+          goto out;
+        }
+
+      if (!g_dbus_connection_close_sync (direct_connection, NULL, &error))
+        {
+          g_test_fail_printf ("Failed to close direct connection: %s", 
error->message);
+          goto out;
+        }
+      g_clear_object (&direct_connection);
+    }
+
+  if (!wait_for_pidfd_count (app_pid, baseline))
+    g_test_fail_printf ("Direct connection pidfds accumulated after 
reconnecting");
+
+out:
+  if (direct_connection)
+    g_dbus_connection_close_sync (direct_connection, NULL, NULL);
+  kill (app_pid, SIGTERM);
+  waitpid (app_pid, NULL, 0);
+  g_spawn_close_pid (app_pid);
+}
+
+int
+main (int argc, char **argv)
+{
+  g_test_init (&argc, &argv, NULL);
+  g_test_add_func ("/atk-bridge/direct-connection-is-released",
+                   test_direct_connection_is_released);
+  return g_test_run ();
+}

++++++ at-spi2-core.obsinfo ++++++
--- /var/tmp/diff_new_pack.6fdwqT/_old  2026-09-19 22:19:45.502145846 +0200
+++ /var/tmp/diff_new_pack.6fdwqT/_new  2026-09-19 22:19:45.508146095 +0200
@@ -1,5 +1,5 @@
 name: at-spi2-core
-version: 2.60.6
-mtime: 1785522761
-commit: fff349553d16f99de3258bdeed7b8a663469b84b
+version: 2.60.7
+mtime: 1789571894
+commit: 66707c370bef824ed4edb08a909fc6a61449c12c
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-09-16 17:27:33.000000000 +0200
@@ -0,0 +1,5 @@
+*.obscpio
+*.osc
+_build.*
+.pbuild
+osc-collab.*

Reply via email to