Public bug reported:
Analysis of /var/crash/_usr_bin_wireplumber.108.crash (moved to ~)
Date of crash: Tue Sep 8 18:25:51 2026 | Ubuntu 26.04 (Resolute)
wireplumber 0.5.13-1ubuntu1, glib2.0 2.88.0-1, pipewire 1.6.2-1ubuntu1.1
Process: /usr/bin/wireplumber, uid 108 (lightdm session), ProcCwd
/var/lib/lightdm
Signal: 6 (SIGABRT) - GLib consistency assertion, NOT memory corruption
(wireplumber was EXITING normally when this fired - crash is on the shutdown
path)
=== What happened (verified against the embedded core dump) ===
main (main.c:180) -> daemon_clear (main.c:54) unrefs WpCore at daemon exit
-> wp_core_dispose -> wp_registry_clear unrefs all plugins
-> WpLuaScriptingPlugin deactivate -> lua_close() runs Lua GC finalizers
-> _wplua_gvalue_userdata___gc (wplua/userdata.c:99) drops a GValue holding
the LAST reference to the WpModemManager plugin. That GValue came from the
global Lua variable `mm = Plugin.find("modem-manager")` in
src/scripts/device/find-voice-call-profile.lua:22
-> WpModemManager dispose -> wp_plugin_deactivate -> wp_modem_manager_disable
(module-modem-manager.c:385) -> g_clear_object(&wpmm->dbus)
-> drops LAST reference to the WpDBusConnection plugin
("system-dbus-connection")
-> WpDBusConnection dispose -> closure_array_destroy_all() invalidates the
GClosure created at modules/module-dbus-connection.c:85:
g_signal_connect_object(self->connection, "closed",
G_CALLBACK(on_connection_closed), self, 0);
-> g_closure_invalidate fires the closure's invalidate notifiers. The closure's
notifier array holds TWO (GDBusConnection, invalid_closure_notify) entries
while the GDBusConnection instance (0x570c9aa50660) is already finalized
(ref_count == 0, removed from glib's handler registry).
-> First notifier consumes the last leftover handler entry and removes the dead
connection's handler-list entry; second notifier finds handler == NULL and
hits g_assert(handler != NULL) in invalid_closure_notify (gsignal.c:4110)
-> g_assertion_message_expr: 'assertion failed: (handler != NULL)' -> abort()
=== Root cause ===
Signal-handler bookkeeping desync in glib 2.88.0 involving
g_signal_connect_object() (its g_object_watch_closure-based implementation):
stale invalidate-notifier entries remained in the closure after the signal
instance (GDBusConnection) was destroyed earlier in the shutdown cascade
(instance destroyed before the watching object - the hazardous lifetime
ordering for g_signal_connect_object). When the watcher object is later
disposed and invalidates the closure, GLib trips its own consistency assert.
Contributing factor in wireplumber: shutdown order lets a Lua global hold the
last reference to the modem-manager plugin, so dbus-plugin teardown runs deep
inside Lua GC finalization.
=== Impact ===
Exit-path only: wireplumber has already finished its work when it crashes
(session logout / greeter shutdown under LightDM). No in-session audio impact.
Consequences are noise: /var/crash entries, journald errors, systemd may mark
the stop as failed.
=== Suggested handling ===
1. No existing Launchpad bug for this in wireplumber, and no matching GLib or
WirePlumber upstream report exists -> worth reporting: `ubuntu-bug
wireplumber`
(attach backtrace.txt and this analysis). The core file is decodable via the
steps below.
2. Keep glib2.0/wireplumber updated; this bug class is typically fixed in GLib
point releases. At crash time glibc was 2.43-2ubuntu2.3 (since upgraded).
3. Not worth working around on a normal desktop - but on modem-less systems the
whole chain disappears if modem-manager integration is disabled via
wireplumber component overrides.
=== How the backtrace was decoded (for the bug report) ===
- The .crash file's CoreDump section: per-line base64 (128 KiB chunks, leading
space per line), zstd-compressed ELF core.
- System libs (libc6 2.43-2ubuntu2.3, libm, ld) had been upgraded after the
crash; exact-matching copies were fetched from Launchpad by build-id and put
in a sysroot (core's expected libc build-id:
240c8909736b31f963346aca80667fd00c551e32).
- Debug symbols from ddebs.ubuntu.com (wireplumber, libwireplumber-0.5-0,
libglib2.0-0t64, liblua5.4-0, libc6-dbg) matched by build-id.
- gdb -iex "set sysroot <sysroot>" -iex "set debug-file-directory
<sysroot>/usr/lib/debug"
/usr/bin/wireplumber core -> backtrace.txt
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=6, no_tid=0)
at ./nptl/pthread_kill.c:44
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=6, no_tid=0)
at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (threadid=<optimized out>, signo=6) at
./nptl/pthread_kill.c:89
#2 __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at
./nptl/pthread_kill.c:100
#3 0x000070a478445b7e in __GI_raise (sig=sig@entry=6) at
../sysdeps/posix/raise.c:26
#4 0x000070a4784288ec in __GI_abort () at ./stdlib/abort.c:77
#5 0x000070a4787c7138 in g_assertion_message
(domain=domain@entry=0x70a478945015 "GLib-GObject",
file=file@entry=0x70a478948257 "../../../gobject/gsignal.c",
line=line@entry=4110, func=func@entry=0x70a478950d10 <__func__.24>
"invalid_closure_notify", message=message@entry=0x570c9aa49670 "assertion
failed: (handler != NULL)") at ../../../glib/gtestutils.c:3478
#6 0x000070a4788383f7 in g_assertion_message_expr
(domain=domain@entry=0x70a478945015 "GLib-GObject",
file=file@entry=0x70a478948257 "../../../gobject/gsignal.c",
line=line@entry=4110, func=func@entry=0x70a478950d10 <__func__.24>
"invalid_closure_notify", expr=expr@entry=0x70a478947c66 "handler != NULL") at
../../../glib/gtestutils.c:3504
#7 0x000070a47892bf2c in invalid_closure_notify (instance=0x570c9aa50660,
closure=0x570c9aa3f150) at ../../../gobject/gsignal.c:4110
#8 0x000070a478914124 in closure_invoke_notifiers (notify_type=<optimized
out>, closure=0x570c9aa3f150) at ../../../gobject/gclosure.c:308
#9 closure_invoke_notifiers (closure=0x570c9aa3f150, notify_type=1) at
../../../gobject/gclosure.c:260
#10 closure_invalidate_internal (closure=0x570c9aa3f150) at
../../../gobject/gclosure.c:633
#11 g_closure_invalidate (closure=0x570c9aa3f150) at
../../../gobject/gclosure.c:667
#12 0x000070a478924552 in closure_array_destroy_all (object=0x570c9aa2c370) at
../../../gobject/gobject.c:5702
#13 0x000070a478924685 in g_object_unref (_object=0x570c9aa2c370) at
../../../gobject/gobject.c:4839
#14 0x000070a4789a2fd1 in wp_plugin_deactivate (features=<optimized out>,
object=<optimized out>) at ../lib/wp/plugin.c:144
#15 wp_plugin_deactivate (object=<optimized out>, features=<optimized out>) at
../lib/wp/plugin.c:138
#16 0x000070a4789a190a in wp_object_dispose (object=0x570c9aa3e970) at
../lib/wp/object.c:191
#17 0x000070a478924685 in g_object_unref (_object=0x570c9aa3e970) at
../../../gobject/gobject.c:4839
#18 0x000070a478940e87 in g_value_unset (value=value@entry=0x570c9aa42f78) at
../../../gobject/gvalue.c:213
#19 0x000070a476041c93 in _wplua_gvalue_userdata___gc (L=<optimized out>) at
../modules/module-lua-scripting/wplua/userdata.c:99
#20 0x000070a475fc62fd in precallC (L=0x570c9a9c4c38, func=<optimized out>,
nresults=0, f=<optimized out>) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/ldo.c:536
#21 luaD_precall (L=L@entry=0x570c9a9c4c38, func=<optimized out>,
nresults=nresults@entry=0) at /build/lua5.4-zF06vE/lua5.4-5.4.8/src/ldo.c:602
#22 0x000070a475fc8dc9 in ccall (L=0x570c9a9c4c38, func=<optimized out>,
nResults=0, inc=65537) at /build/lua5.4-zF06vE/lua5.4-5.4.8/src/ldo.c:642
#23 luaD_callnoyield (L=0x570c9a9c4c38, func=<optimized out>, nResults=0) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/ldo.c:662
#24 dothecall (L=L@entry=0x570c9a9c4c38, ud=ud@entry=0x0) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/lgc.c:903
#25 0x000070a475fc0d95 in luaD_rawrunprotected (L=L@entry=0x570c9a9c4c38,
f=f@entry=0x70a475fc8d90 <dothecall>, ud=ud@entry=0x0) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/ldo.c:141
#26 0x000070a475fc10f0 in luaD_pcall (L=L@entry=0x570c9a9c4c38,
func=func@entry=0x70a475fc8d90 <dothecall>, u=u@entry=0x0, old_top=16,
ef=ef@entry=0) at /build/lua5.4-zF06vE/lua5.4-5.4.8/src/ldo.c:964
#27 0x000070a475fc1302 in GCTM (L=L@entry=0x570c9a9c4c38) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/lgc.c:923
#28 0x000070a475fc4dc8 in callallpendingfinalizers (L=0x570c9a9c4c38) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/lgc.c:953
#29 luaC_freeallobjects (L=0x570c9a9c4c38) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/lgc.c:1517
#30 0x000070a475fcab40 in close_state (L=0x570c9a9c4c38) at
/build/lua5.4-zF06vE/lua5.4-5.4.8/src/lstate.c:278
#31 0x000070a4789a2fd1 in wp_plugin_deactivate (features=<optimized out>,
object=<optimized out>) at ../lib/wp/plugin.c:144
#32 wp_plugin_deactivate (object=<optimized out>, features=<optimized out>) at
../lib/wp/plugin.c:138
#33 0x000070a4789a190a in wp_object_dispose (object=0x570c9a9bdd50) at
../lib/wp/object.c:191
#34 0x000070a478924685 in g_object_unref (_object=_object@entry=0x570c9a9bdd50)
at ../../../gobject/gobject.c:4839
#35 0x000070a47898c471 in glib_autoptr_clear_GObject (_ptr=0x570c9a9bdd50) at
/usr/include/glib-2.0/gobject/gobject-autocleanups.h:31
#36 glib_autoptr_cleanup_GObject (_ptr=<synthetic pointer>) at
/usr/include/glib-2.0/gobject/gobject-autocleanups.h:31
#37 wp_registry_clear (self=0x570c9a959768) at ../lib/wp/private/registry.c:176
#38 wp_core_dispose (obj=0x570c9a9596c0) at ../lib/wp/core.c:401
#39 0x000070a478924685 in g_object_unref (_object=0x570c9a9596c0) at
../../../gobject/gobject.c:4839
#40 0x0000570c7fa959cb in daemon_clear (self=0x7ffc94ce6d90) at ../src/main.c:54
#41 glib_auto_cleanup_WpDaemon (_ptr=0x7ffc94ce6d90) at ../src/main.c:57
#42 main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:180
ProblemType: Bug
DistroRelease: Ubuntu 26.04
Package: wireplumber 0.5.13-1ubuntu1
ProcVersionSignature: Ubuntu 7.0.0-31.31-generic 7.0.14
Uname: Linux 7.0.0-31-generic x86_64
NonfreeKernelModules: nvidia_modeset nvidia
ApportVersion: 2.34.1-0ubuntu0.1
Architecture: amd64
CasperMD5CheckResult: unknown
CurrentDesktop: XFCE
Date: Fri Sep 11 11:37:44 2026
InstallationDate: Installed on 2025-07-13 (425 days ago)
InstallationMedia: Xubuntu 24.04.2 LTS "Noble Numbat" - Release amd64
(20250215.1)
ProcEnviron:
LANG=en_US.UTF-8
PATH=(custom, no user)
SHELL=/bin/bash
TERM=xterm-256color
XDG_RUNTIME_DIR=<set>
SourcePackage: wireplumber
UpgradeStatus: Upgraded to resolute on 2026-05-10 (124 days ago)
** Affects: wireplumber (Ubuntu)
Importance: Undecided
Status: New
** Tags: amd64 apport-bug resolute
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2167080
Title:
SIGABRT — GLib's own consistency assert — during normal wireplumber
shutdown
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/wireplumber/+bug/2167080/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs