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