public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/glib2] cve-2026-58016-f44: Fix GThreadPool initialization that is breaking createrepo_c (BZ #1795052)
@ 2026-08-11 10:36 Stephen Gallagher
  0 siblings, 0 replies; only message in thread
From: Stephen Gallagher @ 2026-08-11 10:36 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/glib2
            Branch : cve-2026-58016-f44
            Commit : ab00509fe1bf3f4e91242d0771bdc177da017d8c
            Author : Stephen Gallagher <sgallagh@redhat.com>
            Date   : 2020-01-29T10:11:54-05:00
            Stats  : +108/-1 in 2 file(s)
            URL    : https://src.fedoraproject.org/rpms/glib2/c/ab00509fe1bf3f4e91242d0771bdc177da017d8c?branch=cve-2026-58016-f44

            Log:
            Fix GThreadPool initialization that is breaking createrepo_c (BZ #1795052)

Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>

---
diff --git a/0001-Fix-initialization-logic-of-GThreadPool-if-the-first.patch b/0001-Fix-initialization-logic-of-GThreadPool-if-the-first.patch
new file mode 100644
index 0000000..568ac7b
--- /dev/null
+++ b/0001-Fix-initialization-logic-of-GThreadPool-if-the-first.patch
@@ -0,0 +1,99 @@
+From 78bae85d215e3e1ce77c828c2075d216edbc36f6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Sat, 25 Jan 2020 11:08:22 +0200
+Subject: [PATCH] Fix initialization logic of GThreadPool if the first created
+ pool is an exclusive one
+
+Previously we would only ever run the initialization code once, but part
+of it only if a non-exclusive pool was created. This caused the shared
+state to be inconsistent if the first pool to be created was exclusive
+and the second non-exclusive.
+
+Fixes https://gitlab.gnome.org/GNOME/glib/issues/2012
+---
+ glib/gthreadpool.c | 67 +++++++++++++++++++++++-----------------------
+ 1 file changed, 33 insertions(+), 34 deletions(-)
+
+diff --git a/glib/gthreadpool.c b/glib/gthreadpool.c
+index dd6546be4568c7b819145d8cbc6654c9c182f767..ed34fcd525b63937636ae31b1461af8341e578e5 100644
+--- a/glib/gthreadpool.c
++++ b/glib/gthreadpool.c
+@@ -579,42 +579,41 @@ g_thread_pool_new (GFunc      func,
+ 
+   G_LOCK (init);
+   if (!unused_thread_queue)
+-    {
+       unused_thread_queue = g_async_queue_new ();
+-      /* For the very first non-exclusive thread-pool we remember the thread
+-       * scheduler settings of the thread creating the pool, if supported by
+-       * the GThread implementation. This is then used for making sure that
+-       * all threads created on the non-exclusive thread-pool have the same
+-       * scheduler settings, and more importantly don't just inherit them
+-       * from the thread that just happened to push a new task and caused
+-       * a new thread to be created.
+-       *
+-       * Not doing so could cause real-time priority threads or otherwise
+-       * threads with problematic scheduler settings to be part of the
+-       * non-exclusive thread-pools.
+-       *
+-       * If this is not supported by the GThread implementation then we here
+-       * start a thread that will inherit the scheduler settings from this
+-       * very thread and whose only purpose is to spawn new threads with the
+-       * same settings for use by the non-exclusive thread-pools.
+-       *
+-       *
+-       * For non-exclusive thread-pools this is not required as all threads
+-       * are created immediately below and are running forever, so they will
+-       * automatically inherit the scheduler settings from this very thread.
+-       */
+-      if (!exclusive)
++
++  /* For the very first non-exclusive thread-pool we remember the thread
++   * scheduler settings of the thread creating the pool, if supported by
++   * the GThread implementation. This is then used for making sure that
++   * all threads created on the non-exclusive thread-pool have the same
++   * scheduler settings, and more importantly don't just inherit them
++   * from the thread that just happened to push a new task and caused
++   * a new thread to be created.
++   *
++   * Not doing so could cause real-time priority threads or otherwise
++   * threads with problematic scheduler settings to be part of the
++   * non-exclusive thread-pools.
++   *
++   * If this is not supported by the GThread implementation then we here
++   * start a thread that will inherit the scheduler settings from this
++   * very thread and whose only purpose is to spawn new threads with the
++   * same settings for use by the non-exclusive thread-pools.
++   *
++   *
++   * For non-exclusive thread-pools this is not required as all threads
++   * are created immediately below and are running forever, so they will
++   * automatically inherit the scheduler settings from this very thread.
++   */
++  if (!exclusive && !have_shared_thread_scheduler_settings && !spawn_thread_queue)
++    {
++      if (g_thread_get_scheduler_settings (&shared_thread_scheduler_settings))
+         {
+-          if (g_thread_get_scheduler_settings (&shared_thread_scheduler_settings))
+-            {
+-              have_shared_thread_scheduler_settings = TRUE;
+-            }
+-          else
+-            {
+-              spawn_thread_queue = g_async_queue_new ();
+-              g_cond_init (&spawn_thread_cond);
+-              g_thread_new ("pool-spawner", g_thread_pool_spawn_thread, NULL);
+-            }
++          have_shared_thread_scheduler_settings = TRUE;
++        }
++      else
++        {
++          spawn_thread_queue = g_async_queue_new ();
++          g_cond_init (&spawn_thread_cond);
++          g_thread_new ("pool-spawner", g_thread_pool_spawn_thread, NULL);
+         }
+     }
+   G_UNLOCK (init);
+-- 
+2.24.1
+

diff --git a/glib2.spec b/glib2.spec
index e5794fd..1554154 100644
--- a/glib2.spec
+++ b/glib2.spec
@@ -2,7 +2,7 @@
 
 Name: glib2
 Version: 2.63.4
-Release: 2%{?dist}
+Release: 3%{?dist}
 Summary: A library of handy utility functions
 
 License: LGPLv2+
@@ -35,6 +35,11 @@ Recommends: shared-mime-info
 # glib 2.59.0 hash table changes broke older gcr versions / password prompts in gnome-shell
 Conflicts: gcr < 3.28.1
 
+# Patches from upstream
+
+# Fix for https://gitlab.gnome.org/GNOME/glib/issues/2012
+Patch0001: 0001-Fix-initialization-logic-of-GThreadPool-if-the-first.patch
+
 %description
 GLib is the low-level core library that forms the basis for projects
 such as GTK+ and GNOME. It provides data structure handling for C,
@@ -216,6 +221,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
 %{_datadir}/installed-tests
 
 %changelog
+* Wed Jan 29 2020 Stephen Gallagher <sgallagh@redhat.com> - 2.63.4-3
+- Fix GThreadPool initialization that is breaking createrepo_c (BZ #1795052)
+
 * Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.63.4-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
 

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-11 10:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-11 10:36 [rpms/glib2] cve-2026-58016-f44: Fix GThreadPool initialization that is breaking createrepo_c (BZ #1795052) Stephen Gallagher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox