public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Stephen Gallagher <sgallagh@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/glib2] cve-2026-58016-f44: Fix GThreadPool initialization that is breaking createrepo_c (BZ #1795052)
Date: Tue, 11 Aug 2026 10:36:55 GMT	[thread overview]
Message-ID: <178644461558.1.7162224140121814887.rpms-glib2-ab00509fe1bf@fedoraproject.org> (raw)

            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
 

                 reply	other threads:[~2026-08-11 10:36 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178644461558.1.7162224140121814887.rpms-glib2-ab00509fe1bf@fedoraproject.org \
    --to=sgallagh@redhat.com \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox