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