Public bug reported:
Please consider backporting
https://gitlab.gnome.org/GNOME/glib/-/commit/7e30869 to Ubuntu 24.04
glib2
I finally tracked down why evolution (with EWS backend in my case) ends
up with a bunch of livelocked jobs making no forward progress when it
tries to refresh too many folders at once.
It boils down to evo exhausing glib2's GTask pool, and the underlying
GTask watchdog for growing the pool not working properly. The above
upstream commit fixes the latter.
Here's a more detailed description from my artifical buddy:
Evolution's mail sync jobs can occupy every thread in GIO's shared GTask
pool while blocked on a common connection lock; the lock holder then
performs a synchronous TLS handshake (glib-networking's
g_tls_connection_base_handshake()), whose handshake worker is itself
queued as a GTask on that same exhausted pool — and because gtask.c's
pool-growing watchdog is left disarmed at that point (glib 2.80's
g_task_thread_cleanup() shrinks the pool's max threads on every
completion and nothing re-arms the watchdog when a task is merely
queued), the handshake task never runs, deadlocking the account
permanently; fixed upstream by commit 7e30869 ("gtask: fix
g_task_run_in_thread", issue #3840), which keeps one thread of headroom,
but that fix is absent from the glib-2-80 series shipped in noble.
ProblemType: Bug
DistroRelease: Ubuntu 24.04
Package: libglib2.0-0t64 2.80.0-6ubuntu3.8
ProcVersionSignature: Ubuntu 7.0.0-28.28~24.04.1-generic 7.0.12
Uname: Linux 7.0.0-28-generic x86_64
ApportVersion: 2.28.3-0ubuntu0.1
Architecture: amd64
CasperMD5CheckResult: unknown
CurrentDesktop: ubuntu:GNOME
Date: Mon Aug 31 14:44:13 2026
ProcEnviron:
LANG=en_US.UTF-8
PATH=(custom, no user)
SHELL=/bin/bash
TERM=xterm-256color
XDG_RUNTIME_DIR=<set>
RebootRequiredPkgs: Error: path contained symlinks.
SourcePackage: glib2.0
UpgradeStatus: No upgrade log present (probably fresh install)
Here's the SRU template:
[Impact]
* Evolution livelocks trying to perform too many tasks at once. This bug
probably affects a number of other glib users.
* This is causing significant headaches for corporate users of evo with
evolution-ews
[Test Plan]
* It can generally be reproduced by triggering enough simultanous tasks in
evolution but it's difficult to provide step-by-step instructions. i have
attached an AI generated reproducer however that reproduces the same condition.
* The patch is upstream. It fixes the problem by ensuring that at least one
spare GTask is always available.
[Where problems could occur]
* I can't think of anything
* The patch modifies the localized cleanup path of a gtask in a rather
straightforward way and has been upstream in glib2 for almost a year now.
[Other Info]
* Upstream: https://gitlab.gnome.org/GNOME/glib/-/commit/7e30869
** Affects: glib2.0 (Ubuntu)
Importance: Undecided
Status: New
** Tags: amd64 apport-bug noble wayland-session
** Description changed:
Please consider backporting
https://gitlab.gnome.org/GNOME/glib/-/commit/7e30869 to Ubuntu 24.04
glib2
I finally tracked down why evolution (with EWS backend in my case) ends
up with a bunch of livelocked jobs making no forward progress when it
tries to refresh too many folders at once.
It boils down to evo exhausing glib2's GTask pool, and the underlying
GTask watchdog for growing the pool not working properly. The above
upstream commit fixes the latter.
Here's a more detailed description from my artifical buddy:
Evolution's mail sync jobs can occupy every thread in GIO's shared GTask
pool while blocked on a common connection lock; the lock holder then
performs a synchronous TLS handshake (glib-networking's
g_tls_connection_base_handshake()), whose handshake worker is itself
queued as a GTask on that same exhausted pool — and because gtask.c's
pool-growing watchdog is left disarmed at that point (glib 2.80's
g_task_thread_cleanup() shrinks the pool's max threads on every
completion and nothing re-arms the watchdog when a task is merely
queued), the handshake task never runs, deadlocking the account
permanently; fixed upstream by commit 7e30869 ("gtask: fix
g_task_run_in_thread", issue #3840), which keeps one thread of headroom,
but that fix is absent from the glib-2-80 series shipped in noble.
ProblemType: Bug
DistroRelease: Ubuntu 24.04
Package: libglib2.0-0t64 2.80.0-6ubuntu3.8
ProcVersionSignature: Ubuntu 7.0.0-28.28~24.04.1-generic 7.0.12
Uname: Linux 7.0.0-28-generic x86_64
ApportVersion: 2.28.3-0ubuntu0.1
Architecture: amd64
CasperMD5CheckResult: unknown
CurrentDesktop: ubuntu:GNOME
Date: Mon Aug 31 14:44:13 2026
ProcEnviron:
- LANG=en_US.UTF-8
- PATH=(custom, no user)
- SHELL=/bin/bash
- TERM=xterm-256color
- XDG_RUNTIME_DIR=<set>
+ LANG=en_US.UTF-8
+ PATH=(custom, no user)
+ SHELL=/bin/bash
+ TERM=xterm-256color
+ XDG_RUNTIME_DIR=<set>
RebootRequiredPkgs: Error: path contained symlinks.
SourcePackage: glib2.0
UpgradeStatus: No upgrade log present (probably fresh install)
+
+ Here's the SRU template:
+
+ [Impact]
+ * Evolution livelocks trying to perform too many tasks at once. This bug
probably affects a number of other glib users.
+ * This is causing significant headaches for corporate users of evo with
evolution-ews
+
+ [Test Plan]
+ * It can generally be reproduced by triggering enough simultanous tasks in
evolution but it's difficult to provide step-by-step instructions. i have
attached an AI generated reproducer however that reproduces the same condition.
+ * The patch is upstream. It fixes the problem by ensuring that at least one
spare GTask is always available.
+
+ [Where problems could occur]
+ * I can't think of anything
+ * The patch modifies the localized cleanup path of a gtask in a rather
straightforward way and has been upstream in glib2 for almost a year now.
+
+ [Other Info]
+ * Upstream: https://gitlab.gnome.org/GNOME/glib/-/commit/7e30869
--
You received this bug notification because you are a member of Ubuntu
Desktop Bugs, which is subscribed to glib2.0 in Ubuntu.
https://bugs.launchpad.net/bugs/2165869
Title:
glib2 GTask bug causes livelocks in Evolution (and others)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/2165869/+subscriptions
--
desktop-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/desktop-bugs