[GH-ISSUE #875] Crashing on pulseaudio #264

Closed
opened 2026-05-22 21:52:17 +01:00 by JakeStanger · 35 comments
Owner

Originally created by @ToxicMushroom on GitHub (Feb 23, 2025).
Original GitHub issue: https://github.com/JakeStanger/ironbar/issues/875

Describe the bug
I don't know why this happens

To Reproduce
:c

Expected behavior
No crashes

System information:

  • Distro: 6.13.3-arch1-1
  • Compositor: niri 25.01 (v0.1.10-245-g81824845)
  • Ironbar version: ironbar 0.16.1-pre

Configuration
Irrelevant I assume
Maybe you need to have the volume or mpd module ?
Added on request*

Config
merlijn@mimic ~ % cat .config/ironbar/config.toml
anchor_to_edges = true
height = 42
position = "top"
icon_theme = "Papirus-Dark"

#[[start]]
#type = "workspaces"
#all_monitors = false
#on_scroll_up = "swaymsg workspace prev_on_output"
#on_scroll_down = "swaymsg workspace next_on_output"

#[[start]]
#type = "sway_mode"

[[end]]
type = "script"
cmd = "/home/merlijn/.bin/iron-bluetooth.sh"
mode = "poll"
interval = 5000
on_click_left = "blueman-manager"

[[end]]
type = "music"
player_type = "mpd"
truncate = "end"


[[end]]
type = "sys_info"
format = [
    "  {cpu_percent}% - {temp_c:k10temp-Tccd1}°C |",
    "  ({memory_percent}%) |",
    "󰋊 ({disk_percent:/}%) |",
    "󰓢 {net_down:enp5s0} / {net_up:enp5s0} Mbps |",
]

[end.interval]
memory = 30
cpu = 1
temps = 5
disks = 300
networks = 3

[[end]]
type = "volume"
format = "{icon} {percentage}%"
max_volume = 100

[end.icons]
volume_high = "󰕾"
volume_medium = "󰖀"
volume_low = "󰕿"
muted = "󰝟"

[end.truncate]
mode = "end"
length = 50


[[end]]
type = "clock"
format = "  %H:%M:%S %d/%m/%Y"

[[end]]
type = "tray"
# direction = "left_to_right"

[[end]]
type = "notifications"
show_count = true

[end.icons]
closed_none = "󰍥"
closed_some = "󱥂"
closed_dnd = "󱅯"
open_none = "󰍡"
open_some = "󱥁"
open_dnd = "󱅮"

Additional context
Last log lines before crash:

Assertion 'm->cached_next_time_event->enabled' failed at ../pulseaudio/src/pulse/mainloop.c:342, function mainloop_time_new(). Aborting.
Assertion 't = find_next_time_event(m)' failed at ../pulseaudio/src/pulse/mainloop.c:740, function calc_next_timeout(). Aborting.
  • I'm not interacting with the bar directly when this happens.
  • I am changing videos in tagstudio frequently which removes and creates a new playback stream in pulse.
Originally created by @ToxicMushroom on GitHub (Feb 23, 2025). Original GitHub issue: https://github.com/JakeStanger/ironbar/issues/875 **Describe the bug** I don't know why this happens **To Reproduce** :c **Expected behavior** No crashes **System information:** - Distro: 6.13.3-arch1-1 - Compositor: niri 25.01 (v0.1.10-245-g81824845) - Ironbar version: ironbar 0.16.1-pre **Configuration** Irrelevant I assume Maybe you need to have the volume or mpd module ? Added on request* <details><summary>Config</summary> ```toml merlijn@mimic ~ % cat .config/ironbar/config.toml anchor_to_edges = true height = 42 position = "top" icon_theme = "Papirus-Dark" #[[start]] #type = "workspaces" #all_monitors = false #on_scroll_up = "swaymsg workspace prev_on_output" #on_scroll_down = "swaymsg workspace next_on_output" #[[start]] #type = "sway_mode" [[end]] type = "script" cmd = "/home/merlijn/.bin/iron-bluetooth.sh" mode = "poll" interval = 5000 on_click_left = "blueman-manager" [[end]] type = "music" player_type = "mpd" truncate = "end" [[end]] type = "sys_info" format = [ " {cpu_percent}% - {temp_c:k10temp-Tccd1}°C |", " ({memory_percent}%) |", "󰋊 ({disk_percent:/}%) |", "󰓢 {net_down:enp5s0} / {net_up:enp5s0} Mbps |", ] [end.interval] memory = 30 cpu = 1 temps = 5 disks = 300 networks = 3 [[end]] type = "volume" format = "{icon} {percentage}%" max_volume = 100 [end.icons] volume_high = "󰕾" volume_medium = "󰖀" volume_low = "󰕿" muted = "󰝟" [end.truncate] mode = "end" length = 50 [[end]] type = "clock" format = " %H:%M:%S %d/%m/%Y" [[end]] type = "tray" # direction = "left_to_right" [[end]] type = "notifications" show_count = true [end.icons] closed_none = "󰍥" closed_some = "󱥂" closed_dnd = "󱅯" open_none = "󰍡" open_some = "󱥁" open_dnd = "󱅮" ``` </details> **Additional context** Last log lines before crash: ``` Assertion 'm->cached_next_time_event->enabled' failed at ../pulseaudio/src/pulse/mainloop.c:342, function mainloop_time_new(). Aborting. Assertion 't = find_next_time_event(m)' failed at ../pulseaudio/src/pulse/mainloop.c:740, function calc_next_timeout(). Aborting. ``` - I'm not interacting with the bar directly when this happens. - I am changing videos in `tagstudio` frequently which removes and creates a new playback stream in pulse.
Author
Owner

@JakeStanger commented on GitHub (Feb 23, 2025):

Irrelevant I assume. Maybe you need to have the volume or mpd module ?

This will be related to the volume module. Config for that (esp how many instances) would be useful to know.

Seems like an odd one, and probably horrible to debug. I'll keep this in mind in case I see it, but won't be able to do anything without repro steps.

<!-- gh-comment-id:2677149633 --> @JakeStanger commented on GitHub (Feb 23, 2025): > Irrelevant I assume. Maybe you need to have the volume or mpd module ? This will be related to the volume module. Config for that (esp how many instances) would be useful to know. Seems like an odd one, and probably horrible to debug. I'll keep this in mind in case I see it, but won't be able to do anything without repro steps.
Author
Owner

@ToxicMushroom commented on GitHub (Feb 23, 2025):

I also love software, I added the config for you

<!-- gh-comment-id:2677163980 --> @ToxicMushroom commented on GitHub (Feb 23, 2025): I also love software, I added the config for you
Author
Owner

@JakeStanger commented on GitHub (Feb 28, 2025):

I'm going to invest some time into logging when I can, so that hopefully you can run with trace logs filtered down to just Pulse and get some more info out if/when it happens again.

<!-- gh-comment-id:2691524176 --> @JakeStanger commented on GitHub (Feb 28, 2025): I'm going to invest some time into logging when I can, so that hopefully you can run with trace logs filtered down to just Pulse and get some more info out if/when it happens again.
Author
Owner

@ToxicMushroom commented on GitHub (Mar 1, 2025):

sounds good tyvm

<!-- gh-comment-id:2691747198 --> @ToxicMushroom commented on GitHub (Mar 1, 2025): sounds good tyvm
Author
Owner

@JakeStanger commented on GitHub (Mar 24, 2025):

Will merge the above PR in a min, which adds some more logging. I've also bothered to learn more about how tracing-subscriber works and turns out it has all the smart filtering stuff built in.

That means you should be able to run with the below to get trace logs for just volume:

IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar

Note you'll probably want to set IRONBAR_FILE_LOG too to ensure it gets written to disk.

<!-- gh-comment-id:2747868589 --> @JakeStanger commented on GitHub (Mar 24, 2025): Will merge the above PR in a min, which adds some more logging. I've also bothered to learn more about how tracing-subscriber works and turns out it has all the smart filtering stuff built in. That means you should be able to run with the below to get trace logs for just volume: ```bash IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar ``` Note you'll probably want to set IRONBAR_FILE_LOG too to ensure it gets written to disk.
Author
Owner

@JakeStanger commented on GitHub (Mar 24, 2025):

Are you also able to confirm what version of Pulse (or Pipewire-Pulse) you're using please? Just realised I don't have that

<!-- gh-comment-id:2747873708 --> @JakeStanger commented on GitHub (Mar 24, 2025): Are you also able to confirm what version of Pulse (or Pipewire-Pulse) you're using please? Just realised I don't have that
Author
Owner

@ToxicMushroom commented on GitHub (Mar 24, 2025):

merlijn@statice ~ % pipewire --version
pipewire
Compiled with libpipewire 1.4.1
Linked with libpipewire 1.4.1

<!-- gh-comment-id:2748581861 --> @ToxicMushroom commented on GitHub (Mar 24, 2025): merlijn@statice ~ % pipewire --version pipewire Compiled with libpipewire 1.4.1 Linked with libpipewire 1.4.1
Author
Owner

@ToxicMushroom commented on GitHub (Mar 24, 2025):

IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar

Note you'll probably want to set IRONBAR_FILE_LOG too to ensure it gets written to disk.

Thanks for the tip, ill add this to my launch script :)

<!-- gh-comment-id:2748587386 --> @ToxicMushroom commented on GitHub (Mar 24, 2025): > IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar > > Note you'll probably want to set IRONBAR_FILE_LOG too to ensure it gets written to disk. Thanks for the tip, ill add this to my launch script :)
Author
Owner

@JakeStanger commented on GitHub (May 20, 2025):

@ToxicMushroom hey, just checking to see if you've seen this crash in the past couple of months?

<!-- gh-comment-id:2894227537 --> @JakeStanger commented on GitHub (May 20, 2025): @ToxicMushroom hey, just checking to see if you've seen this crash in the past couple of months?
Author
Owner

@ToxicMushroom commented on GitHub (May 20, 2025):

no but it's also been some time since I used that application

<!-- gh-comment-id:2894247814 --> @ToxicMushroom commented on GitHub (May 20, 2025): no but it's also been some time since I used that application
Author
Owner

@ToxicMushroom commented on GitHub (May 22, 2025):

Imo you can close this, I'll post more info with those logs if I ever get crashes again :)

<!-- gh-comment-id:2902043435 --> @ToxicMushroom commented on GitHub (May 22, 2025): Imo you can close this, I'll post more info with those logs if I ever get crashes again :)
Author
Owner

@JakeStanger commented on GitHub (May 22, 2025):

Cool will do. Shout any time and I can reopen

<!-- gh-comment-id:2902060751 --> @JakeStanger commented on GitHub (May 22, 2025): Cool will do. Shout any time and I can reopen
Author
Owner

@quietvoid commented on GitHub (May 24, 2025):

I just started encountering this crash and it seems somewhat random.

sway[19226]: Assertion 'm->cached_next_time_event->enabled' failed at ../pulseaudio/src/pulse/mainloop.c:342, function mainloop_time_new(). Aborting.
sway[19226]: Assertion 't = find_next_time_event(m)' failed at ../pulseaudio/src/pulse/mainloop.c:740, function calc_next_timeout(). Aborting.
systemd-coredump[33964]: Process 19226 (ironbar) of user 1000 terminated abnormally with signal 6/ABRT, processing...
systemd[1]: Started Process Core Dump (PID 33964/UID 0).
systemd-coredump[33966]: [🡕] Process 19226 (ironbar) of user 1000 dumped core.

Currently installed commit bd9b3af
Will try to get a trace, usually I get a crash when starting playback in the Spotify app.

<!-- gh-comment-id:2906870479 --> @quietvoid commented on GitHub (May 24, 2025): I just started encountering this crash and it seems somewhat random. ``` sway[19226]: Assertion 'm->cached_next_time_event->enabled' failed at ../pulseaudio/src/pulse/mainloop.c:342, function mainloop_time_new(). Aborting. sway[19226]: Assertion 't = find_next_time_event(m)' failed at ../pulseaudio/src/pulse/mainloop.c:740, function calc_next_timeout(). Aborting. systemd-coredump[33964]: Process 19226 (ironbar) of user 1000 terminated abnormally with signal 6/ABRT, processing... systemd[1]: Started Process Core Dump (PID 33964/UID 0). systemd-coredump[33966]: [🡕] Process 19226 (ironbar) of user 1000 dumped core. ``` Currently installed commit bd9b3af Will try to get a trace, usually I get a crash when starting playback in the Spotify app.
Author
Owner

@ToxicMushroom commented on GitHub (Oct 17, 2025):

@JakeStanger Alright, I'm back to regularly crashing but I'm still on 0.17.0, so idk if the code has changed since ?

merlijn@mimic ~ % tail --lines 200 ironbar.log
[2127480.850] {Default Queue}  -> wl_surface#39.attach(wl_buffer#58, 0, 0)
[2127480.871] {Default Queue}  -> wl_surface#39.set_buffer_scale(1)
[2127480.880] {Default Queue}  -> wl_surface#39.damage(1384, 0, 221, 4)
[2127480.888] {Default Queue}  -> wl_surface#39.damage(1834, 0, 203, 4)
[2127480.895] {Default Queue}  -> wl_surface#39.damage(1384, 4, 221, 34)
[2127480.902] {Default Queue}  -> wl_surface#39.damage(1834, 4, 203, 34)
[2127480.909] {Default Queue}  -> wl_surface#39.damage(2123, 4, 198, 34)
[2127480.915] {Default Queue}  -> wl_surface#39.damage(1384, 38, 221, 4)
[2127480.921] {Default Queue}  -> wl_surface#39.damage(1834, 38, 203, 4)
[2127481.078] {Default Queue}  -> wl_surface#39.frame(new id wl_callback#41)
[2127481.089] {Default Queue}  -> wl_surface#39.commit()
[2127481.631] {Default Queue} wl_buffer#44.release()
[2127481.645] {Default Queue}  -> wl_buffer#44.destroy()
[2127481.651] {Default Queue}  -> wl_shm_pool#55.destroy()
[2127809.893] {Display Queue} wl_display#1.delete_id(44)
[2127809.920] {Display Queue} wl_display#1.delete_id(55)
[2127809.928] {Display Queue} wl_display#1.delete_id(62)
[2127809.934] {Default Queue} wl_callback#62.done(21314878)
[2127810.232] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#62, fd 75, 322560)
[2127810.264] {Default Queue}  -> wl_shm_pool#62.create_buffer(new id wl_buffer#55, 0, 1920, 42, 7680, 0)
[2127810.633] {Default Queue}  -> wl_surface#35.attach(wl_buffer#55, 0, 0)
[2127810.643] {Default Queue}  -> wl_surface#35.set_buffer_scale(1)
[2127810.650] {Default Queue}  -> wl_surface#35.damage(718, 0, 221, 4)
[2127810.656] {Default Queue}  -> wl_surface#35.damage(1168, 0, 203, 4)
[2127810.662] {Default Queue}  -> wl_surface#35.damage(718, 4, 221, 34)
[2127810.668] {Default Queue}  -> wl_surface#35.damage(1168, 4, 203, 34)
[2127810.673] {Default Queue}  -> wl_surface#35.damage(1457, 4, 198, 34)
[2127810.678] {Default Queue}  -> wl_surface#35.damage(718, 38, 221, 4)
[2127810.683] {Default Queue}  -> wl_surface#35.damage(1168, 38, 203, 4)
[2127810.737] {Default Queue}  -> wl_surface#35.frame(new id wl_callback#44)
[2127810.744] {Default Queue}  -> wl_surface#35.commit()
[2127811.260] {Default Queue} wl_buffer#47.release()
[2127811.271] {Default Queue}  -> wl_buffer#47.destroy()
[2127811.277] {Default Queue}  -> wl_shm_pool#61.destroy()
[2128496.716] {Display Queue} wl_display#1.delete_id(47)
[2128496.742] {Display Queue} wl_display#1.delete_id(61)
[2128496.755] {Display Queue} wl_display#1.delete_id(41)
[2128496.766] {Default Queue} wl_callback#41.done(21315565)
[2128497.078] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#41, fd 75, 430080)
[2128497.104] {Default Queue}  -> wl_shm_pool#41.create_buffer(new id wl_buffer#61, 0, 2560, 42, 10240, 0)
[2128497.557] {Default Queue}  -> wl_surface#39.attach(wl_buffer#61, 0, 0)
[2128497.576] {Default Queue}  -> wl_surface#39.set_buffer_scale(1)
[2128497.588] {Default Queue}  -> wl_surface#39.damage(1384, 0, 221, 4)
[2128497.598] {Default Queue}  -> wl_surface#39.damage(1384, 4, 221, 34)
[2128497.609] {Default Queue}  -> wl_surface#39.damage(2123, 4, 198, 34)
[2128497.619] {Default Queue}  -> wl_surface#39.damage(1384, 38, 221, 4)
[2128497.821] {Default Queue}  -> wl_surface#39.frame(new id wl_callback#47)
[2128497.836] {Default Queue}  -> wl_surface#39.commit()
[2128498.567] {Default Queue} wl_buffer#58.release()
[2128498.594] {Default Queue}  -> wl_buffer#58.destroy()
[2128498.606] {Default Queue}  -> wl_shm_pool#48.destroy()
[2128809.934] {Display Queue} wl_display#1.delete_id(58)
[2128809.964] {Display Queue} wl_display#1.delete_id(48)
[2128809.981] {Display Queue} wl_display#1.delete_id(44)
[2128809.989] {Default Queue} wl_callback#44.done(21315878)
[2128810.259] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#44, fd 75, 322560)
[2128810.276] {Default Queue}  -> wl_shm_pool#44.create_buffer(new id wl_buffer#48, 0, 1920, 42, 7680, 0)
[2128810.624] {Default Queue}  -> wl_surface#35.attach(wl_buffer#48, 0, 0)
[2128810.635] {Default Queue}  -> wl_surface#35.set_buffer_scale(1)
[2128810.642] {Default Queue}  -> wl_surface#35.damage(718, 0, 221, 4)
[2128810.648] {Default Queue}  -> wl_surface#35.damage(718, 4, 221, 34)
[2128810.655] {Default Queue}  -> wl_surface#35.damage(1457, 4, 198, 34)
[2128810.661] {Default Queue}  -> wl_surface#35.damage(718, 38, 221, 4)
[2128810.728] {Default Queue}  -> wl_surface#35.frame(new id wl_callback#58)
[2128810.736] {Default Queue}  -> wl_surface#35.commit()
[2128811.183] {Default Queue} wl_buffer#55.release()
[2128811.194] {Default Queue}  -> wl_buffer#55.destroy()
[2128811.200] {Default Queue}  -> wl_shm_pool#62.destroy()
[2129492.127] {Display Queue} wl_display#1.delete_id(55)
[2129492.168] {Display Queue} wl_display#1.delete_id(62)
[2129492.185] {Display Queue} wl_display#1.delete_id(47)
[2129492.202] {Default Queue} wl_callback#47.done(21316561)
[2129492.623] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#47, fd 75, 430080)
[2129492.654] {Default Queue}  -> wl_shm_pool#47.create_buffer(new id wl_buffer#62, 0, 2560, 42, 10240, 0)
[2129493.218] {Default Queue}  -> wl_surface#39.attach(wl_buffer#62, 0, 0)
[2129493.273] {Default Queue}  -> wl_surface#39.set_buffer_scale(1)
[2129493.304] {Default Queue}  -> wl_surface#39.damage(1301, 0, 73, 4)
[2129493.344] {Default Queue}  -> wl_surface#39.damage(1384, 0, 221, 4)
[2129493.384] {Default Queue}  -> wl_surface#39.damage(1301, 4, 73, 34)
[2129493.412] {Default Queue}  -> wl_surface#39.damage(1384, 4, 221, 34)
[2129493.428] {Default Queue}  -> wl_surface#39.damage(2123, 4, 198, 34)
[2129493.450] {Default Queue}  -> wl_surface#39.damage(1301, 38, 73, 4)
[2129493.475] {Default Queue}  -> wl_surface#39.damage(1384, 38, 221, 4)
[2129493.637] {Default Queue}  -> wl_surface#39.frame(new id wl_callback#55)
[2129493.663] {Default Queue}  -> wl_surface#39.commit()
[2129493.842] {Default Queue} wl_buffer#61.release()
[2129493.872] {Default Queue}  -> wl_buffer#61.destroy()
[2129493.881] {Default Queue}  -> wl_shm_pool#41.destroy()
[2129804.922] {Display Queue} wl_display#1.delete_id(61)
[2129804.954] {Display Queue} wl_display#1.delete_id(41)
[2129804.974] {Display Queue} wl_display#1.delete_id(58)
[2129804.987] {Default Queue} wl_callback#58.done(21316873)
[2129805.276] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#58, fd 75, 322560)
[2129805.296] {Default Queue}  -> wl_shm_pool#58.create_buffer(new id wl_buffer#41, 0, 1920, 42, 7680, 0)
[2129805.632] {Default Queue}  -> wl_surface#35.attach(wl_buffer#41, 0, 0)
[2129805.646] {Default Queue}  -> wl_surface#35.set_buffer_scale(1)
[2129805.654] {Default Queue}  -> wl_surface#35.damage(635, 0, 73, 4)
[2129805.661] {Default Queue}  -> wl_surface#35.damage(718, 0, 221, 4)
[2129805.666] {Default Queue}  -> wl_surface#35.damage(635, 4, 73, 34)
[2129805.672] {Default Queue}  -> wl_surface#35.damage(718, 4, 221, 34)
[2129805.677] {Default Queue}  -> wl_surface#35.damage(1457, 4, 198, 34)
[2129805.684] {Default Queue}  -> wl_surface#35.damage(635, 38, 73, 4)
[2129805.690] {Default Queue}  -> wl_surface#35.damage(718, 38, 221, 4)
[2129805.767] {Default Queue}  -> wl_surface#35.frame(new id wl_callback#61)
[2129805.779] {Default Queue}  -> wl_surface#35.commit()
[2129806.392] {Default Queue} wl_buffer#48.release()
[2129806.413] {Default Queue}  -> wl_buffer#48.destroy()
[2129806.427] {Default Queue}  -> wl_shm_pool#44.destroy()
[2130489.162] {Display Queue} wl_display#1.delete_id(48)
[2130489.198] {Display Queue} wl_display#1.delete_id(44)
[2130489.211] {Display Queue} wl_display#1.delete_id(55)
[2130489.223] {Default Queue} wl_callback#55.done(21317558)
[2130489.645] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#55, fd 75, 430080)
[2130489.676] {Default Queue}  -> wl_shm_pool#55.create_buffer(new id wl_buffer#44, 0, 2560, 42, 10240, 0)
[2130490.222] {Default Queue}  -> wl_surface#39.attach(wl_buffer#44, 0, 0)
[2130490.250] {Default Queue}  -> wl_surface#39.set_buffer_scale(1)
[2130490.280] {Default Queue}  -> wl_surface#39.damage(1384, 0, 221, 4)
[2130490.294] {Default Queue}  -> wl_surface#39.damage(1834, 0, 203, 4)
[2130490.307] {Default Queue}  -> wl_surface#39.damage(1384, 4, 221, 34)
[2130490.318] {Default Queue}  -> wl_surface#39.damage(1834, 4, 203, 34)
[2130490.330] {Default Queue}  -> wl_surface#39.damage(2123, 4, 198, 34)
[2130490.341] {Default Queue}  -> wl_surface#39.damage(1384, 38, 221, 4)
[2130490.354] {Default Queue}  -> wl_surface#39.damage(1834, 38, 203, 4)
[2130490.545] {Default Queue}  -> wl_surface#39.frame(new id wl_callback#48)
[2130490.568] {Default Queue}  -> wl_surface#39.commit()
[2130490.742] {Default Queue} wl_buffer#62.release()
[2130490.758] {Default Queue}  -> wl_buffer#62.destroy()
[2130490.766] {Default Queue}  -> wl_shm_pool#47.destroy()
[2130800.535] {Display Queue} wl_display#1.delete_id(62)
[2130800.566] {Display Queue} wl_display#1.delete_id(47)
[2130800.580] {Display Queue} wl_display#1.delete_id(61)
[2130800.592] {Default Queue} wl_callback#61.done(21317869)
[2130800.907] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#61, fd 75, 322560)
[2130800.928] {Default Queue}  -> wl_shm_pool#61.create_buffer(new id wl_buffer#47, 0, 1920, 42, 7680, 0)
[2130801.390] {Default Queue}  -> wl_surface#35.attach(wl_buffer#47, 0, 0)
[2130801.413] {Default Queue}  -> wl_surface#35.set_buffer_scale(1)
[2130801.422] {Default Queue}  -> wl_surface#35.damage(718, 0, 221, 4)
[2130801.430] {Default Queue}  -> wl_surface#35.damage(1168, 0, 203, 4)
[2130801.452] {Default Queue}  -> wl_surface#35.damage(718, 4, 221, 34)
[2130801.465] {Default Queue}  -> wl_surface#35.damage(1168, 4, 203, 34)
[2130801.474] {Default Queue}  -> wl_surface#35.damage(1457, 4, 198, 34)
[2130801.489] {Default Queue}  -> wl_surface#35.damage(718, 38, 221, 4)
[2130801.499] {Default Queue}  -> wl_surface#35.damage(1168, 38, 203, 4)
[2130801.575] {Default Queue}  -> wl_surface#35.frame(new id wl_callback#62)
[2130801.587] {Default Queue}  -> wl_surface#35.commit()
[2130802.028] {Default Queue} wl_buffer#41.release()
[2130802.043] {Default Queue}  -> wl_buffer#41.destroy()
[2130802.053] {Default Queue}  -> wl_shm_pool#58.destroy()
[2131489.586] {Display Queue} wl_display#1.delete_id(41)
[2131489.621] {Display Queue} wl_display#1.delete_id(58)
[2131489.639] {Display Queue} wl_display#1.delete_id(48)
[2131489.649] {Default Queue} wl_callback#48.done(21318558)
[2131489.985] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#48, fd 75, 430080)
[2131490.012] {Default Queue}  -> wl_shm_pool#48.create_buffer(new id wl_buffer#58, 0, 2560, 42, 10240, 0)
[2131490.438] {Default Queue}  -> wl_surface#39.attach(wl_buffer#58, 0, 0)
[2131490.458] {Default Queue}  -> wl_surface#39.set_buffer_scale(1)
[2131490.466] {Default Queue}  -> wl_surface#39.damage(1384, 0, 221, 4)
[2131490.473] {Default Queue}  -> wl_surface#39.damage(1384, 4, 221, 34)
[2131490.480] {Default Queue}  -> wl_surface#39.damage(2123, 4, 198, 34)
[2131490.488] {Default Queue}  -> wl_surface#39.damage(1384, 38, 221, 4)
[2131490.656] {Default Queue}  -> wl_surface#39.frame(new id wl_callback#41)
[2131490.666] {Default Queue}  -> wl_surface#39.commit()
[2131491.094] {Default Queue} wl_buffer#44.release()
[2131491.110] {Default Queue}  -> wl_buffer#44.destroy()
[2131491.116] {Default Queue}  -> wl_shm_pool#55.destroy()
[2131810.073] {Display Queue} wl_display#1.delete_id(44)
[2131810.101] {Display Queue} wl_display#1.delete_id(55)
[2131810.111] {Display Queue} wl_display#1.delete_id(62)
[2131810.117] {Default Queue} wl_callback#62.done(21318879)
[2131810.408] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#62, fd 75, 322560)
[2131810.424] {Default Queue}  -> wl_shm_pool#62.create_buffer(new id wl_buffer#55, 0, 1920, 42, 7680, 0)
[2131810.785] {Default Queue}  -> wl_surface#35.attach(wl_buffer#55, 0, 0)
[2131810.800] {Default Queue}  -> wl_surface#35.set_buffer_scale(1)
[2131810.812] {Default Queue}  -> wl_surface#35.damage(718, 0, 221, 4)
[2131810.823] {Default Queue}  -> wl_surface#35.damage(718, 4, 221, 34)
[2131810.833] {Default Queue}  -> wl_surface#35.damage(1457, 4, 198, 34)
[2131810.842] {Default Queue}  -> wl_surface#35.damage(718, 38, 221, 4)
[2131810.921] {Default Queue}  -> wl_surface#35.frame(new id wl_callback#44)
[2131810.937] {Default Queue}  -> wl_surface#35.commit()
[2131811.336] {Default Queue} wl_buffer#47.release()
[2131811.350] {Default Queue}  -> wl_buffer#47.destroy()
[2131811.358] {Default Queue}  -> wl_shm_pool#61.destroy()
2025-10-17T17:59:35.226156Z TRACE ironbar::clients::volume: 234: server event: SinkInput, op: New, i: 612
2025-10-17T17:59:35.226230Z TRACE ironbar::clients::volume::sink_input: 80: Locking context
2025-10-17T17:59:35.226244Z DEBUG ironbar::clients::volume::sink_input: 84: new sink input
2025-10-17T17:59:35.226404Z TRACE ironbar::clients::volume::sink_input: 117: adding SinkInputInfo { index: 612, name: Some("Playback"), owner_module: None, client: Some(611), sink: 4294967295, sample_spec: Spec { format: F32le, rate: 48000, channels: 2 }, channel_map: Map { channels: 2, map: [FrontLeft, FrontRight, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono] }, volume: ChannelVolumes { channels: 2, values: [Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0)] }, buffer_usec: MicroSeconds(0), sink_usec: MicroSeconds(0), resample_method: Some("PipeWire"), driver: Some("PipeWire"), mute: false, proplist: [client.api = "pipewire-pulse", pulse.server.type = "unix", pipewire.access.portal.app_id = "dev.vencord.Vesktop", media.category = "Manager", pipewire.client.access = "flatpak", application.name = "Chromium", application.process.id = "170", application.process.user = "merlijn", application.process.host = "mimic", application.process.binary = "vesktop.bin", application.language = "en_US.UTF-8", window.x11.display = ":0", application.process.machine_id = "6ca9a93a9a214972b3505a8bf4b60a66", application.process.session_id = "3", application.icon_name = "chromium-browser", media.name = "Playback", pulse.corked = "true", node.rate = "1/48000", node.latency = "1024/48000", stream.is-live = "true", node.name = "Chromium", node.want-driver = "true", node.autoconnect = "true", media.class = "Stream/Output/Audio", port.group = "stream.0", adapt.follower.spa-node = "", object.register = "false", factory.id = "7", clock.quantum-limit = "8192", node.loop.name = "data-loop.0", library.name = "audioconvert/libspa-audioconvert", client.id = "125", object.id = "114", object.serial = "612", module-stream-restore.id = "sink-input-by-application-name:Chromium"], corked: true, has_volume: true, volume_writable: true, format: Info { encoding: PCM, properties: [format.sample_format = "\"float32le\"", format.rate = "48000", format.channels = "2", format.channel_map = "\"front-left,front-right\""] } }
2025-10-17T17:59:35.226539Z TRACE ironbar::clients::volume::sink_input: 119: Locking inputs
2025-10-17T17:59:35.249055Z TRACE ironbar::clients::volume: 234: server event: SinkInput, op: Changed, i: 612
2025-10-17T17:59:35.249130Z TRACE ironbar::clients::volume::sink_input: 80: Locking context
2025-10-17T17:59:35.249142Z DEBUG ironbar::clients::volume::sink_input: 93: sink input changed
2025-10-17T17:59:35.249271Z TRACE ironbar::clients::volume::sink_input: 132: updating SinkInputInfo { index: 612, name: Some("Playback"), owner_module: None, client: Some(611), sink: 4294967295, sample_spec: Spec { format: F32le, rate: 48000, channels: 2 }, channel_map: Map { channels: 2, map: [FrontLeft, FrontRight, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono] }, volume: ChannelVolumes { channels: 2, values: [Volume(22925), Volume(22925), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0)] }, buffer_usec: MicroSeconds(0), sink_usec: MicroSeconds(0), resample_method: Some("PipeWire"), driver: Some("PipeWire"), mute: false, proplist: [client.api = "pipewire-pulse", pulse.server.type = "unix", pipewire.access.portal.app_id = "dev.vencord.Vesktop", media.category = "Manager", pipewire.client.access = "flatpak", application.name = "Chromium", application.process.id = "170", application.process.user = "merlijn", application.process.host = "mimic", application.process.binary = "vesktop.bin", application.language = "en_US.UTF-8", window.x11.display = ":0", application.process.machine_id = "6ca9a93a9a214972b3505a8bf4b60a66", application.process.session_id = "3", application.icon_name = "chromium-browser", media.name = "Playback", pulse.corked = "true", node.rate = "1/48000", node.latency = "1024/48000", stream.is-live = "true", node.name = "Chromium", node.want-driver = "true", node.autoconnect = "true", media.class = "Stream/Output/Audio", port.group = "stream.0", adapt.follower.spa-node = "", object.register = "false", factory.id = "7", clock.quantum-limit = "8192", node.loop.name = "data-loop.0", library.name = "audioconvert/libspa-audioconvert", client.id = "125", object.id = "114", object.serial = "612", module-stream-restore.id = "sink-input-by-application-name:Chromium"], corked: true, has_volume: true, volume_writable: true, format: Info { encoding: PCM, properties: [format.sample_format = "\"float32le\"", format.rate = "48000", format.channels = "2", format.channel_map = "\"front-left,front-right\""] } }
2025-10-17T17:59:35.249474Z TRACE ironbar::clients::volume::sink_input: 135: Locking inputs
2025-10-17T17:59:35.250016Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 46: Locking self.connection
2025-10-17T17:59:35.250081Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 49: Locking inputs
2025-10-17T17:59:35.250285Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 46: Locking self.connection
2025-10-17T17:59:35.250328Z TRACE ironbar::clients::volume: 234: server event: SinkInput, op: Changed, i: 612
2025-10-17T17:59:35.250338Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 49: Locking inputs
2025-10-17T17:59:35.250351Z TRACE ironbar::clients::volume::sink_input: 80: Locking context
2025-10-17T17:59:35.250368Z DEBUG ironbar::clients::volume::sink_input: 93: sink input changed
Assertion 'e->mainloop->n_enabled_defer_events > 0' failed at ../pulseaudio/src/pulse/mainloop.c:261, function mainloop_defer_enable(). Aborting.
<!-- gh-comment-id:3416568668 --> @ToxicMushroom commented on GitHub (Oct 17, 2025): @JakeStanger Alright, I'm back to regularly crashing but I'm still on 0.17.0, so idk if the code has changed since ? ``` merlijn@mimic ~ % tail --lines 200 ironbar.log [2127480.850] {Default Queue} -> wl_surface#39.attach(wl_buffer#58, 0, 0) [2127480.871] {Default Queue} -> wl_surface#39.set_buffer_scale(1) [2127480.880] {Default Queue} -> wl_surface#39.damage(1384, 0, 221, 4) [2127480.888] {Default Queue} -> wl_surface#39.damage(1834, 0, 203, 4) [2127480.895] {Default Queue} -> wl_surface#39.damage(1384, 4, 221, 34) [2127480.902] {Default Queue} -> wl_surface#39.damage(1834, 4, 203, 34) [2127480.909] {Default Queue} -> wl_surface#39.damage(2123, 4, 198, 34) [2127480.915] {Default Queue} -> wl_surface#39.damage(1384, 38, 221, 4) [2127480.921] {Default Queue} -> wl_surface#39.damage(1834, 38, 203, 4) [2127481.078] {Default Queue} -> wl_surface#39.frame(new id wl_callback#41) [2127481.089] {Default Queue} -> wl_surface#39.commit() [2127481.631] {Default Queue} wl_buffer#44.release() [2127481.645] {Default Queue} -> wl_buffer#44.destroy() [2127481.651] {Default Queue} -> wl_shm_pool#55.destroy() [2127809.893] {Display Queue} wl_display#1.delete_id(44) [2127809.920] {Display Queue} wl_display#1.delete_id(55) [2127809.928] {Display Queue} wl_display#1.delete_id(62) [2127809.934] {Default Queue} wl_callback#62.done(21314878) [2127810.232] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#62, fd 75, 322560) [2127810.264] {Default Queue} -> wl_shm_pool#62.create_buffer(new id wl_buffer#55, 0, 1920, 42, 7680, 0) [2127810.633] {Default Queue} -> wl_surface#35.attach(wl_buffer#55, 0, 0) [2127810.643] {Default Queue} -> wl_surface#35.set_buffer_scale(1) [2127810.650] {Default Queue} -> wl_surface#35.damage(718, 0, 221, 4) [2127810.656] {Default Queue} -> wl_surface#35.damage(1168, 0, 203, 4) [2127810.662] {Default Queue} -> wl_surface#35.damage(718, 4, 221, 34) [2127810.668] {Default Queue} -> wl_surface#35.damage(1168, 4, 203, 34) [2127810.673] {Default Queue} -> wl_surface#35.damage(1457, 4, 198, 34) [2127810.678] {Default Queue} -> wl_surface#35.damage(718, 38, 221, 4) [2127810.683] {Default Queue} -> wl_surface#35.damage(1168, 38, 203, 4) [2127810.737] {Default Queue} -> wl_surface#35.frame(new id wl_callback#44) [2127810.744] {Default Queue} -> wl_surface#35.commit() [2127811.260] {Default Queue} wl_buffer#47.release() [2127811.271] {Default Queue} -> wl_buffer#47.destroy() [2127811.277] {Default Queue} -> wl_shm_pool#61.destroy() [2128496.716] {Display Queue} wl_display#1.delete_id(47) [2128496.742] {Display Queue} wl_display#1.delete_id(61) [2128496.755] {Display Queue} wl_display#1.delete_id(41) [2128496.766] {Default Queue} wl_callback#41.done(21315565) [2128497.078] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#41, fd 75, 430080) [2128497.104] {Default Queue} -> wl_shm_pool#41.create_buffer(new id wl_buffer#61, 0, 2560, 42, 10240, 0) [2128497.557] {Default Queue} -> wl_surface#39.attach(wl_buffer#61, 0, 0) [2128497.576] {Default Queue} -> wl_surface#39.set_buffer_scale(1) [2128497.588] {Default Queue} -> wl_surface#39.damage(1384, 0, 221, 4) [2128497.598] {Default Queue} -> wl_surface#39.damage(1384, 4, 221, 34) [2128497.609] {Default Queue} -> wl_surface#39.damage(2123, 4, 198, 34) [2128497.619] {Default Queue} -> wl_surface#39.damage(1384, 38, 221, 4) [2128497.821] {Default Queue} -> wl_surface#39.frame(new id wl_callback#47) [2128497.836] {Default Queue} -> wl_surface#39.commit() [2128498.567] {Default Queue} wl_buffer#58.release() [2128498.594] {Default Queue} -> wl_buffer#58.destroy() [2128498.606] {Default Queue} -> wl_shm_pool#48.destroy() [2128809.934] {Display Queue} wl_display#1.delete_id(58) [2128809.964] {Display Queue} wl_display#1.delete_id(48) [2128809.981] {Display Queue} wl_display#1.delete_id(44) [2128809.989] {Default Queue} wl_callback#44.done(21315878) [2128810.259] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#44, fd 75, 322560) [2128810.276] {Default Queue} -> wl_shm_pool#44.create_buffer(new id wl_buffer#48, 0, 1920, 42, 7680, 0) [2128810.624] {Default Queue} -> wl_surface#35.attach(wl_buffer#48, 0, 0) [2128810.635] {Default Queue} -> wl_surface#35.set_buffer_scale(1) [2128810.642] {Default Queue} -> wl_surface#35.damage(718, 0, 221, 4) [2128810.648] {Default Queue} -> wl_surface#35.damage(718, 4, 221, 34) [2128810.655] {Default Queue} -> wl_surface#35.damage(1457, 4, 198, 34) [2128810.661] {Default Queue} -> wl_surface#35.damage(718, 38, 221, 4) [2128810.728] {Default Queue} -> wl_surface#35.frame(new id wl_callback#58) [2128810.736] {Default Queue} -> wl_surface#35.commit() [2128811.183] {Default Queue} wl_buffer#55.release() [2128811.194] {Default Queue} -> wl_buffer#55.destroy() [2128811.200] {Default Queue} -> wl_shm_pool#62.destroy() [2129492.127] {Display Queue} wl_display#1.delete_id(55) [2129492.168] {Display Queue} wl_display#1.delete_id(62) [2129492.185] {Display Queue} wl_display#1.delete_id(47) [2129492.202] {Default Queue} wl_callback#47.done(21316561) [2129492.623] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#47, fd 75, 430080) [2129492.654] {Default Queue} -> wl_shm_pool#47.create_buffer(new id wl_buffer#62, 0, 2560, 42, 10240, 0) [2129493.218] {Default Queue} -> wl_surface#39.attach(wl_buffer#62, 0, 0) [2129493.273] {Default Queue} -> wl_surface#39.set_buffer_scale(1) [2129493.304] {Default Queue} -> wl_surface#39.damage(1301, 0, 73, 4) [2129493.344] {Default Queue} -> wl_surface#39.damage(1384, 0, 221, 4) [2129493.384] {Default Queue} -> wl_surface#39.damage(1301, 4, 73, 34) [2129493.412] {Default Queue} -> wl_surface#39.damage(1384, 4, 221, 34) [2129493.428] {Default Queue} -> wl_surface#39.damage(2123, 4, 198, 34) [2129493.450] {Default Queue} -> wl_surface#39.damage(1301, 38, 73, 4) [2129493.475] {Default Queue} -> wl_surface#39.damage(1384, 38, 221, 4) [2129493.637] {Default Queue} -> wl_surface#39.frame(new id wl_callback#55) [2129493.663] {Default Queue} -> wl_surface#39.commit() [2129493.842] {Default Queue} wl_buffer#61.release() [2129493.872] {Default Queue} -> wl_buffer#61.destroy() [2129493.881] {Default Queue} -> wl_shm_pool#41.destroy() [2129804.922] {Display Queue} wl_display#1.delete_id(61) [2129804.954] {Display Queue} wl_display#1.delete_id(41) [2129804.974] {Display Queue} wl_display#1.delete_id(58) [2129804.987] {Default Queue} wl_callback#58.done(21316873) [2129805.276] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#58, fd 75, 322560) [2129805.296] {Default Queue} -> wl_shm_pool#58.create_buffer(new id wl_buffer#41, 0, 1920, 42, 7680, 0) [2129805.632] {Default Queue} -> wl_surface#35.attach(wl_buffer#41, 0, 0) [2129805.646] {Default Queue} -> wl_surface#35.set_buffer_scale(1) [2129805.654] {Default Queue} -> wl_surface#35.damage(635, 0, 73, 4) [2129805.661] {Default Queue} -> wl_surface#35.damage(718, 0, 221, 4) [2129805.666] {Default Queue} -> wl_surface#35.damage(635, 4, 73, 34) [2129805.672] {Default Queue} -> wl_surface#35.damage(718, 4, 221, 34) [2129805.677] {Default Queue} -> wl_surface#35.damage(1457, 4, 198, 34) [2129805.684] {Default Queue} -> wl_surface#35.damage(635, 38, 73, 4) [2129805.690] {Default Queue} -> wl_surface#35.damage(718, 38, 221, 4) [2129805.767] {Default Queue} -> wl_surface#35.frame(new id wl_callback#61) [2129805.779] {Default Queue} -> wl_surface#35.commit() [2129806.392] {Default Queue} wl_buffer#48.release() [2129806.413] {Default Queue} -> wl_buffer#48.destroy() [2129806.427] {Default Queue} -> wl_shm_pool#44.destroy() [2130489.162] {Display Queue} wl_display#1.delete_id(48) [2130489.198] {Display Queue} wl_display#1.delete_id(44) [2130489.211] {Display Queue} wl_display#1.delete_id(55) [2130489.223] {Default Queue} wl_callback#55.done(21317558) [2130489.645] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#55, fd 75, 430080) [2130489.676] {Default Queue} -> wl_shm_pool#55.create_buffer(new id wl_buffer#44, 0, 2560, 42, 10240, 0) [2130490.222] {Default Queue} -> wl_surface#39.attach(wl_buffer#44, 0, 0) [2130490.250] {Default Queue} -> wl_surface#39.set_buffer_scale(1) [2130490.280] {Default Queue} -> wl_surface#39.damage(1384, 0, 221, 4) [2130490.294] {Default Queue} -> wl_surface#39.damage(1834, 0, 203, 4) [2130490.307] {Default Queue} -> wl_surface#39.damage(1384, 4, 221, 34) [2130490.318] {Default Queue} -> wl_surface#39.damage(1834, 4, 203, 34) [2130490.330] {Default Queue} -> wl_surface#39.damage(2123, 4, 198, 34) [2130490.341] {Default Queue} -> wl_surface#39.damage(1384, 38, 221, 4) [2130490.354] {Default Queue} -> wl_surface#39.damage(1834, 38, 203, 4) [2130490.545] {Default Queue} -> wl_surface#39.frame(new id wl_callback#48) [2130490.568] {Default Queue} -> wl_surface#39.commit() [2130490.742] {Default Queue} wl_buffer#62.release() [2130490.758] {Default Queue} -> wl_buffer#62.destroy() [2130490.766] {Default Queue} -> wl_shm_pool#47.destroy() [2130800.535] {Display Queue} wl_display#1.delete_id(62) [2130800.566] {Display Queue} wl_display#1.delete_id(47) [2130800.580] {Display Queue} wl_display#1.delete_id(61) [2130800.592] {Default Queue} wl_callback#61.done(21317869) [2130800.907] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#61, fd 75, 322560) [2130800.928] {Default Queue} -> wl_shm_pool#61.create_buffer(new id wl_buffer#47, 0, 1920, 42, 7680, 0) [2130801.390] {Default Queue} -> wl_surface#35.attach(wl_buffer#47, 0, 0) [2130801.413] {Default Queue} -> wl_surface#35.set_buffer_scale(1) [2130801.422] {Default Queue} -> wl_surface#35.damage(718, 0, 221, 4) [2130801.430] {Default Queue} -> wl_surface#35.damage(1168, 0, 203, 4) [2130801.452] {Default Queue} -> wl_surface#35.damage(718, 4, 221, 34) [2130801.465] {Default Queue} -> wl_surface#35.damage(1168, 4, 203, 34) [2130801.474] {Default Queue} -> wl_surface#35.damage(1457, 4, 198, 34) [2130801.489] {Default Queue} -> wl_surface#35.damage(718, 38, 221, 4) [2130801.499] {Default Queue} -> wl_surface#35.damage(1168, 38, 203, 4) [2130801.575] {Default Queue} -> wl_surface#35.frame(new id wl_callback#62) [2130801.587] {Default Queue} -> wl_surface#35.commit() [2130802.028] {Default Queue} wl_buffer#41.release() [2130802.043] {Default Queue} -> wl_buffer#41.destroy() [2130802.053] {Default Queue} -> wl_shm_pool#58.destroy() [2131489.586] {Display Queue} wl_display#1.delete_id(41) [2131489.621] {Display Queue} wl_display#1.delete_id(58) [2131489.639] {Display Queue} wl_display#1.delete_id(48) [2131489.649] {Default Queue} wl_callback#48.done(21318558) [2131489.985] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#48, fd 75, 430080) [2131490.012] {Default Queue} -> wl_shm_pool#48.create_buffer(new id wl_buffer#58, 0, 2560, 42, 10240, 0) [2131490.438] {Default Queue} -> wl_surface#39.attach(wl_buffer#58, 0, 0) [2131490.458] {Default Queue} -> wl_surface#39.set_buffer_scale(1) [2131490.466] {Default Queue} -> wl_surface#39.damage(1384, 0, 221, 4) [2131490.473] {Default Queue} -> wl_surface#39.damage(1384, 4, 221, 34) [2131490.480] {Default Queue} -> wl_surface#39.damage(2123, 4, 198, 34) [2131490.488] {Default Queue} -> wl_surface#39.damage(1384, 38, 221, 4) [2131490.656] {Default Queue} -> wl_surface#39.frame(new id wl_callback#41) [2131490.666] {Default Queue} -> wl_surface#39.commit() [2131491.094] {Default Queue} wl_buffer#44.release() [2131491.110] {Default Queue} -> wl_buffer#44.destroy() [2131491.116] {Default Queue} -> wl_shm_pool#55.destroy() [2131810.073] {Display Queue} wl_display#1.delete_id(44) [2131810.101] {Display Queue} wl_display#1.delete_id(55) [2131810.111] {Display Queue} wl_display#1.delete_id(62) [2131810.117] {Default Queue} wl_callback#62.done(21318879) [2131810.408] {Default Queue} -> wl_shm#7.create_pool(new id wl_shm_pool#62, fd 75, 322560) [2131810.424] {Default Queue} -> wl_shm_pool#62.create_buffer(new id wl_buffer#55, 0, 1920, 42, 7680, 0) [2131810.785] {Default Queue} -> wl_surface#35.attach(wl_buffer#55, 0, 0) [2131810.800] {Default Queue} -> wl_surface#35.set_buffer_scale(1) [2131810.812] {Default Queue} -> wl_surface#35.damage(718, 0, 221, 4) [2131810.823] {Default Queue} -> wl_surface#35.damage(718, 4, 221, 34) [2131810.833] {Default Queue} -> wl_surface#35.damage(1457, 4, 198, 34) [2131810.842] {Default Queue} -> wl_surface#35.damage(718, 38, 221, 4) [2131810.921] {Default Queue} -> wl_surface#35.frame(new id wl_callback#44) [2131810.937] {Default Queue} -> wl_surface#35.commit() [2131811.336] {Default Queue} wl_buffer#47.release() [2131811.350] {Default Queue} -> wl_buffer#47.destroy() [2131811.358] {Default Queue} -> wl_shm_pool#61.destroy() 2025-10-17T17:59:35.226156Z TRACE ironbar::clients::volume: 234: server event: SinkInput, op: New, i: 612 2025-10-17T17:59:35.226230Z TRACE ironbar::clients::volume::sink_input: 80: Locking context 2025-10-17T17:59:35.226244Z DEBUG ironbar::clients::volume::sink_input: 84: new sink input 2025-10-17T17:59:35.226404Z TRACE ironbar::clients::volume::sink_input: 117: adding SinkInputInfo { index: 612, name: Some("Playback"), owner_module: None, client: Some(611), sink: 4294967295, sample_spec: Spec { format: F32le, rate: 48000, channels: 2 }, channel_map: Map { channels: 2, map: [FrontLeft, FrontRight, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono] }, volume: ChannelVolumes { channels: 2, values: [Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0)] }, buffer_usec: MicroSeconds(0), sink_usec: MicroSeconds(0), resample_method: Some("PipeWire"), driver: Some("PipeWire"), mute: false, proplist: [client.api = "pipewire-pulse", pulse.server.type = "unix", pipewire.access.portal.app_id = "dev.vencord.Vesktop", media.category = "Manager", pipewire.client.access = "flatpak", application.name = "Chromium", application.process.id = "170", application.process.user = "merlijn", application.process.host = "mimic", application.process.binary = "vesktop.bin", application.language = "en_US.UTF-8", window.x11.display = ":0", application.process.machine_id = "6ca9a93a9a214972b3505a8bf4b60a66", application.process.session_id = "3", application.icon_name = "chromium-browser", media.name = "Playback", pulse.corked = "true", node.rate = "1/48000", node.latency = "1024/48000", stream.is-live = "true", node.name = "Chromium", node.want-driver = "true", node.autoconnect = "true", media.class = "Stream/Output/Audio", port.group = "stream.0", adapt.follower.spa-node = "", object.register = "false", factory.id = "7", clock.quantum-limit = "8192", node.loop.name = "data-loop.0", library.name = "audioconvert/libspa-audioconvert", client.id = "125", object.id = "114", object.serial = "612", module-stream-restore.id = "sink-input-by-application-name:Chromium"], corked: true, has_volume: true, volume_writable: true, format: Info { encoding: PCM, properties: [format.sample_format = "\"float32le\"", format.rate = "48000", format.channels = "2", format.channel_map = "\"front-left,front-right\""] } } 2025-10-17T17:59:35.226539Z TRACE ironbar::clients::volume::sink_input: 119: Locking inputs 2025-10-17T17:59:35.249055Z TRACE ironbar::clients::volume: 234: server event: SinkInput, op: Changed, i: 612 2025-10-17T17:59:35.249130Z TRACE ironbar::clients::volume::sink_input: 80: Locking context 2025-10-17T17:59:35.249142Z DEBUG ironbar::clients::volume::sink_input: 93: sink input changed 2025-10-17T17:59:35.249271Z TRACE ironbar::clients::volume::sink_input: 132: updating SinkInputInfo { index: 612, name: Some("Playback"), owner_module: None, client: Some(611), sink: 4294967295, sample_spec: Spec { format: F32le, rate: 48000, channels: 2 }, channel_map: Map { channels: 2, map: [FrontLeft, FrontRight, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono, Mono] }, volume: ChannelVolumes { channels: 2, values: [Volume(22925), Volume(22925), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0), Volume(0)] }, buffer_usec: MicroSeconds(0), sink_usec: MicroSeconds(0), resample_method: Some("PipeWire"), driver: Some("PipeWire"), mute: false, proplist: [client.api = "pipewire-pulse", pulse.server.type = "unix", pipewire.access.portal.app_id = "dev.vencord.Vesktop", media.category = "Manager", pipewire.client.access = "flatpak", application.name = "Chromium", application.process.id = "170", application.process.user = "merlijn", application.process.host = "mimic", application.process.binary = "vesktop.bin", application.language = "en_US.UTF-8", window.x11.display = ":0", application.process.machine_id = "6ca9a93a9a214972b3505a8bf4b60a66", application.process.session_id = "3", application.icon_name = "chromium-browser", media.name = "Playback", pulse.corked = "true", node.rate = "1/48000", node.latency = "1024/48000", stream.is-live = "true", node.name = "Chromium", node.want-driver = "true", node.autoconnect = "true", media.class = "Stream/Output/Audio", port.group = "stream.0", adapt.follower.spa-node = "", object.register = "false", factory.id = "7", clock.quantum-limit = "8192", node.loop.name = "data-loop.0", library.name = "audioconvert/libspa-audioconvert", client.id = "125", object.id = "114", object.serial = "612", module-stream-restore.id = "sink-input-by-application-name:Chromium"], corked: true, has_volume: true, volume_writable: true, format: Info { encoding: PCM, properties: [format.sample_format = "\"float32le\"", format.rate = "48000", format.channels = "2", format.channel_map = "\"front-left,front-right\""] } } 2025-10-17T17:59:35.249474Z TRACE ironbar::clients::volume::sink_input: 135: Locking inputs 2025-10-17T17:59:35.250016Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 46: Locking self.connection 2025-10-17T17:59:35.250081Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 49: Locking inputs 2025-10-17T17:59:35.250285Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 46: Locking self.connection 2025-10-17T17:59:35.250328Z TRACE ironbar::clients::volume: 234: server event: SinkInput, op: Changed, i: 612 2025-10-17T17:59:35.250338Z TRACE set_input_volume{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 54, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 59, name: "alsa_output.usb-iFi__by_AMR__ZEN_DAC_3_005A-00.analog-stereo", description: "ZEN DAC 3 Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 60, name: "alsa_output.pci-0000_08_00.1.hdmi-stereo", description: "Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)", volume: VolumeLevels([0, 0]), muted: false, active: false }, Sink { index: 61, name: "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_REV8-00.analog-stereo", description: "Yeti Stereo Microphone Analog Stereo", volume: VolumeLevels([65536, 65536]), muted: false, active: false }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 210, name: "playback", volume: VolumeLevels([65536]), muted: false, can_set_volume: true }, SinkInput { index: 368, name: "Spotify", volume: VolumeLevels([33883, 33883]), muted: false, can_set_volume: true }, SinkInput { index: 510, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }, SinkInput { index: 594, name: "Kubernetes Zero to Hero: The Complete Beginner’s Guide (2025 Edition) - YouTube", volume: VolumeLevels([37676, 37676]), muted: false, can_set_volume: true }, SinkInput { index: 612, name: "Playback", volume: VolumeLevels([22925, 22925]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } index=612 volume_percent=35.0}: ironbar::clients::volume::sink_input: 49: Locking inputs 2025-10-17T17:59:35.250351Z TRACE ironbar::clients::volume::sink_input: 80: Locking context 2025-10-17T17:59:35.250368Z DEBUG ironbar::clients::volume::sink_input: 93: sink input changed Assertion 'e->mainloop->n_enabled_defer_events > 0' failed at ../pulseaudio/src/pulse/mainloop.c:261, function mainloop_defer_enable(). Aborting. ```
Author
Owner

@JakeStanger commented on GitHub (Oct 18, 2025):

I did refactor the client code slightly in 0.17.1 to fix a crash I found. It was caused by requesting data from Pulse too often, which killed the connection.

I have no idea if it's the same one you're encountering, but it might be worth a shot.

<!-- gh-comment-id:3418826717 --> @JakeStanger commented on GitHub (Oct 18, 2025): I did refactor the client code slightly in `0.17.1` to fix *a* crash I found. It was caused by requesting data from Pulse too often, which killed the connection. I have no idea if it's the same one you're encountering, but it might be worth a shot.
Author
Owner

@shazow commented on GitHub (Nov 11, 2025):

Not sure if this is the same crash, but happening on 0.17.1:

[...]
2025-11-11T15:32:17.614797Z  WARN system_tray::client: 469: org.freedesktop.DBus.Error.InvalidArgs: No such property “IconPixmap”
2025-11-11T15:35:11.614458Z  WARN system_tray::client: 469: org.freedesktop.DBus.Error.InvalidArgs: No such property “IconPixmap”
2025-11-11T15:35:17.614480Z  WARN system_tray::client: 469: org.freedesktop.DBus.Error.InvalidArgs: No such property “IconPixmap”
Assertion 'e->mainloop->n_enabled_defer_events > 0' failed at ../src/pulse/mainloop.c:261, function mainloop_defer_enable(). Aborting.
Aborted (core dumped)
<!-- gh-comment-id:3517594745 --> @shazow commented on GitHub (Nov 11, 2025): Not sure if this is the same crash, but happening on `0.17.1`: ``` [...] 2025-11-11T15:32:17.614797Z WARN system_tray::client: 469: org.freedesktop.DBus.Error.InvalidArgs: No such property “IconPixmap” 2025-11-11T15:35:11.614458Z WARN system_tray::client: 469: org.freedesktop.DBus.Error.InvalidArgs: No such property “IconPixmap” 2025-11-11T15:35:17.614480Z WARN system_tray::client: 469: org.freedesktop.DBus.Error.InvalidArgs: No such property “IconPixmap” Assertion 'e->mainloop->n_enabled_defer_events > 0' failed at ../src/pulse/mainloop.c:261, function mainloop_defer_enable(). Aborting. Aborted (core dumped) ```
Author
Owner

@JakeStanger commented on GitHub (Nov 11, 2025):

Yes that looks like it could be the same issue. Do you have any context as to what could have caused it? Any playing audio, any button clicks, etc?

<!-- gh-comment-id:3517606213 --> @JakeStanger commented on GitHub (Nov 11, 2025): Yes that looks like it could be the same issue. Do you have any context as to what could have caused it? Any playing audio, any button clicks, etc?
Author
Owner

@shazow commented on GitHub (Nov 11, 2025):

@JakeStanger I haven't noticed, seems quite variable! I don't think there's any music playing, but it seems to happen pretty quickly (like 5-20 minutes?).

Latest crash happened after a minute or two with this error: Assertion 'q->front' failed at ../src/pulsecore/queue.c:81, function pa_queue_push(). Aborting.

My full config is here: github.com/shazow/nixfiles@dfb6dff521/home/common/ironbar.nix

<!-- gh-comment-id:3517637508 --> @shazow commented on GitHub (Nov 11, 2025): @JakeStanger I haven't noticed, seems quite variable! I don't think there's any music playing, but it seems to happen pretty quickly (like 5-20 minutes?). Latest crash happened after a minute or two with this error: `Assertion 'q->front' failed at ../src/pulsecore/queue.c:81, function pa_queue_push(). Aborting.` My full config is here: https://github.com/shazow/nixfiles/blob/dfb6dff5217a62a817507c613f085c865239f353/home/common/ironbar.nix
Author
Owner

@ToxicMushroom commented on GitHub (Nov 11, 2025):

My audio-crashes stopped again 🙈

<!-- gh-comment-id:3517768078 --> @ToxicMushroom commented on GitHub (Nov 11, 2025): My audio-crashes stopped again 🙈
Author
Owner

@shazow commented on GitHub (Nov 11, 2025):

@ToxicMushroom I'll carry the torch. 😅

@JakeStanger One thing I noticed is that it doesn't crash on my desktop, but does on my laptop. Desktop uses a USB DAC, laptop uses the embedded audio with EasyEffects.

<!-- gh-comment-id:3518181932 --> @shazow commented on GitHub (Nov 11, 2025): @ToxicMushroom I'll carry the torch. 😅 @JakeStanger One thing I noticed is that it doesn't crash on my desktop, but does on my laptop. Desktop uses a USB DAC, laptop uses the embedded [audio with EasyEffects](https://www.google.com/maps/d/u/0/viewer?mid=1fVpjopD3pY9TkJp0Y8M2jUSPAFb4Irbr).
Author
Owner

@quietvoid commented on GitHub (Nov 12, 2025):

Just ran into this

Assertion '!e->next' failed at ../pulseaudio/src/pulsecore/queue.c:104, function pa_queue_pop(). Aborting.

  Stack trace of thread 1842:
  #0  0x00007fe209c9894c n/a (libc.so.6 + 0x9894c)
  #1  0x00007fe209c3e410 raise (libc.so.6 + 0x3e410)
  #2  0x00007fe209c2557a abort (libc.so.6 + 0x2557a)
  #3  0x00007fe209f2c5d4 pa_queue_pop (libpulsecommon-17.0.so + 0x435d4)
  #4  0x00007fe209f311bc n/a (libpulsecommon-17.0.so + 0x481bc)
  #5  0x00007fe209f32aa0 n/a (libpulsecommon-17.0.so + 0x49aa0)
  #6  0x00007fe20b7a51da pa_mainloop_dispatch (libpulse.so.0 + 0x261da)
  #7  0x00007fe20b7a57a2 pa_mainloop_iterate (libpulse.so.0 + 0x267a2)
  #8  0x00005584b340f800 n/a (/usr/bin/ironbar + 0xfae800)
  #9  0x00005584b30a023d n/a (/usr/bin/ironbar + 0xc3f23d)
  #10 0x00005584b2ff51e1 n/a (/usr/bin/ironbar + 0xb941e1)
  #11 0x00005584b2b28e36 n/a (/usr/bin/ironbar + 0x6c7e36)
  #12 0x00005584b2a1b60c n/a (/usr/bin/ironbar + 0x5ba60c)
  #13 0x00005584b373299e n/a (/usr/bin/ironbar + 0x12d199e)
  #14 0x00005584b37359bb n/a (/usr/bin/ironbar + 0x12d49bb)
  #15 0x00005584b3736266 n/a (/usr/bin/ironbar + 0x12d5266)
  #16 0x00005584b38aafaf n/a (/usr/bin/ironbar + 0x1449faf)

It crashed as a YouTube video started in Firefox.

<!-- gh-comment-id:3521453560 --> @quietvoid commented on GitHub (Nov 12, 2025): Just ran into this ``` Assertion '!e->next' failed at ../pulseaudio/src/pulsecore/queue.c:104, function pa_queue_pop(). Aborting. Stack trace of thread 1842: #0 0x00007fe209c9894c n/a (libc.so.6 + 0x9894c) #1 0x00007fe209c3e410 raise (libc.so.6 + 0x3e410) #2 0x00007fe209c2557a abort (libc.so.6 + 0x2557a) #3 0x00007fe209f2c5d4 pa_queue_pop (libpulsecommon-17.0.so + 0x435d4) #4 0x00007fe209f311bc n/a (libpulsecommon-17.0.so + 0x481bc) #5 0x00007fe209f32aa0 n/a (libpulsecommon-17.0.so + 0x49aa0) #6 0x00007fe20b7a51da pa_mainloop_dispatch (libpulse.so.0 + 0x261da) #7 0x00007fe20b7a57a2 pa_mainloop_iterate (libpulse.so.0 + 0x267a2) #8 0x00005584b340f800 n/a (/usr/bin/ironbar + 0xfae800) #9 0x00005584b30a023d n/a (/usr/bin/ironbar + 0xc3f23d) #10 0x00005584b2ff51e1 n/a (/usr/bin/ironbar + 0xb941e1) #11 0x00005584b2b28e36 n/a (/usr/bin/ironbar + 0x6c7e36) #12 0x00005584b2a1b60c n/a (/usr/bin/ironbar + 0x5ba60c) #13 0x00005584b373299e n/a (/usr/bin/ironbar + 0x12d199e) #14 0x00005584b37359bb n/a (/usr/bin/ironbar + 0x12d49bb) #15 0x00005584b3736266 n/a (/usr/bin/ironbar + 0x12d5266) #16 0x00005584b38aafaf n/a (/usr/bin/ironbar + 0x1449faf) ``` It crashed as a YouTube video started in Firefox.
Author
Owner

@JakeStanger commented on GitHub (Nov 12, 2025):

That's the first time we've had a cause (even if completely unreplicatable currently), but that looks like it's a different crash 🙃

I'm going to need a lot more information about each crash to attempt to put any of this together, especially considering I am still yet to ever encounter this:

  • Audio server: pulse/pipewire-pulse
  • Audio server version: v???
  • Active sink type: eg headphones plugged into 3mm jack, ...
    • Bluetooth: ??
  • What were you doing at the time?
  • What programs were playing audio?
  • Were other devices available?
    • Anything exotic?
    • Any external devices like a USB DAC or interface?
  • Any custom software patching/routing/effects in use?
  • Anything else you can think of that would differ from the defaults?
  • Ironbar version: v???
    • If a tagged release does it still occur on latest git?

Logs with as much verbosity as you can provide are useful too:

IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar

Note you'll probably want to set IRONBAR_FILE_LOG too to ensure it gets written to disk.

<!-- gh-comment-id:3521535765 --> @JakeStanger commented on GitHub (Nov 12, 2025): That's the first time we've had a cause (even if completely unreplicatable currently), but that looks like it's a different crash 🙃 I'm going to need a lot more information about each crash to attempt to put any of this together, especially considering I am still yet to ever encounter this: - Audio server: pulse/pipewire-pulse - Audio server version: v??? - Active sink type: eg headphones plugged into 3mm jack, ... - Bluetooth: ?? - What were you doing at the time? - What programs were playing audio? - Were other devices available? - Anything exotic? - Any external devices like a USB DAC or interface? - Any custom software patching/routing/effects in use? - Anything else you can think of that would differ from the defaults? - Ironbar version: v??? - If a tagged release does it still occur on latest git? Logs with as much verbosity as you can provide are useful too: ``` IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar ``` Note you'll probably want to set `IRONBAR_FILE_LOG` too to ensure it gets written to disk.
Author
Owner

@quietvoid commented on GitHub (Nov 12, 2025):

For some reason I'm getting issues a lot this morning, perhaps due to upgrade to easyeffects 8.0.
There's a lot of sink spam in logs.

Setup:

  • Audio server: pipewire-pulse 1:1.4.9-1
  • Active sink type: headphones into DAC
  • Using easyeffects , normally disabled for all output streams.
    • However it seems in latest version 8, the default sink is always being reset to Easy Effects Sink
    • So for now I'll switch it to always process outputs even if no effects are applied.
    • It seems related to easyeffects defaulting to "Use default output", making it constantly switch between the two.
  • ironbar commit github.com/JakeStanger/ironbar@25fe56844a

Traces: traces.log
Log files:

<!-- gh-comment-id:3521759392 --> @quietvoid commented on GitHub (Nov 12, 2025): For some reason I'm getting issues a lot this morning, perhaps due to upgrade to `easyeffects` 8.0. There's a lot of sink spam in logs. Setup: - Audio server: `pipewire-pulse 1:1.4.9-1` - Active sink type: headphones into DAC - Using `easyeffects` , normally disabled for all output streams. - However it seems in latest version 8, the default sink is always being reset to `Easy Effects Sink` - So for now I'll switch it to always process outputs even if no effects are applied. - It seems related to `easyeffects` defaulting to "Use default output", making it constantly switch between the two. - ironbar commit https://github.com/JakeStanger/ironbar/commit/25fe56844a5f9bea26b47954df0b84cab7feae41 Traces: [traces.log](https://github.com/user-attachments/files/23499757/traces.log) Log files: - [ironbar-crash-launch-2025-11-12.log](https://github.com/user-attachments/files/23499761/ironbar-crash-launch-2025-11-12.log) - [ironbar.2025-11-12-crash.log](https://github.com/user-attachments/files/23499764/ironbar.2025-11-12-crash.log)
Author
Owner

@shazow commented on GitHub (Nov 20, 2025):

In case this is any help, I've been running ironbar with IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar for a while and it has not crashed once since I started doing that. Not sure what this is indicative of. 🫠

<!-- gh-comment-id:3560501994 --> @shazow commented on GitHub (Nov 20, 2025): In case this is any help, I've been running ironbar with `IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar` for a while and it has not crashed once since I started doing that. Not sure what this is indicative of. 🫠
Author
Owner

@JakeStanger commented on GitHub (Nov 20, 2025):

If it turns out to be a race condition I'm throwing a tantrum.

I suspect whatever the cause is, it's not consistent. easyeffects certainly seems suspicious.

<!-- gh-comment-id:3560527345 --> @JakeStanger commented on GitHub (Nov 20, 2025): If it turns out to be a race condition I'm throwing a tantrum. I suspect whatever the cause is, it's not consistent. `easyeffects` certainly seems suspicious.
Author
Owner

@quietvoid commented on GitHub (Nov 20, 2025):

I had a lot of crashes regardless of whether or not logs were enabled.
Since my last comment I have had the volume module disabled.

I could try disabling easyeffects and see how it behaves.

<!-- gh-comment-id:3560603683 --> @quietvoid commented on GitHub (Nov 20, 2025): I had a lot of crashes regardless of whether or not logs were enabled. Since my last comment I have had the `volume` module disabled. I could try disabling easyeffects and see how it behaves.
Author
Owner

@weightedangelcube commented on GitHub (Apr 12, 2026):

Also experiencing this issue. Crashes commonly occur when one track stops and another starts. Before a crash, the bar rapidly flickers between the EasyEffects and default sink (my ACCENTUM Bluetooth headphones), so I assume #1411 is related if not the same issue.

Playing YouTube Music on Firefox. No crashes nor flickers happen on Waybar.

The crash does not happen with EasyEffects disabled.

2026-04-12T00:09:29.420246Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 52: Locking self.connection
2026-04-12T00:09:29.420256Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 53: Locking context
2026-04-12T00:09:29.420257Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 52: Locking self.connection
2026-04-12T00:09:29.420266Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 53: Locking context
2026-04-12T00:09:29.423412Z TRACE ironbar::clients::volume: 234: server event: Server, op: Changed, i: 4294967295
2026-04-12T00:09:29.423419Z TRACE ironbar::clients::volume: 250: Locking context
Assertion 'q->front' failed at ../pulseaudio/src/pulsecore/queue.c:81, function pa_queue_push(). Aborting.
Aborted                    (core dumped) IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar
<!-- gh-comment-id:4230420621 --> @weightedangelcube commented on GitHub (Apr 12, 2026): Also experiencing this issue. Crashes commonly occur when one track stops and another starts. Before a crash, the bar rapidly flickers between the EasyEffects and default sink (my ACCENTUM Bluetooth headphones), so I assume #1411 is related if not the same issue. Playing YouTube Music on Firefox. No crashes nor flickers happen on Waybar. The crash does not happen with EasyEffects disabled. ``` 2026-04-12T00:09:29.420246Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 52: Locking self.connection 2026-04-12T00:09:29.420256Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 53: Locking context 2026-04-12T00:09:29.420257Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 52: Locking self.connection 2026-04-12T00:09:29.420266Z TRACE set_default_sink{self=Client { connection: Mutex { data: Connected, poisoned: false, .. }, data: Data { sinks: Mutex { data: [Sink { index: 60, name: "alsa_output.pci-0000_c1_00.6.HiFi__Line__sink", description: "Ryzen HD Audio Controller Line Output", volume: VolumeLevels([26214, 26214]), muted: true, active: false }, Sink { index: 74, name: "easyeffects_sink", description: "Easy Effects Sink", volume: VolumeLevels([65536, 65536]), muted: false, active: true }, Sink { index: 452, name: "bluez_output.80:C3:BA:6E:D5:27", description: "ACCENTUM", volume: VolumeLevels([19609, 19609]), muted: false, active: true }], poisoned: false, .. }, sink_inputs: Mutex { data: [SinkInput { index: 862, name: "YouTube Music", volume: VolumeLevels([44354, 44354]), muted: false, can_set_volume: true }], poisoned: false, .. }, default_sink_name: Mutex { data: Some("easyeffects_sink"), poisoned: false, .. } }, tx: broadcast::Sender, _rx: broadcast::Receiver } name="easyeffects_sink"}: ironbar::clients::volume::sink: 53: Locking context 2026-04-12T00:09:29.423412Z TRACE ironbar::clients::volume: 234: server event: Server, op: Changed, i: 4294967295 2026-04-12T00:09:29.423419Z TRACE ironbar::clients::volume: 250: Locking context Assertion 'q->front' failed at ../pulseaudio/src/pulsecore/queue.c:81, function pa_queue_push(). Aborting. Aborted (core dumped) IRONBAR_LOG=info,ironbar::clients::volume=trace ironbar ```
Author
Owner

@JakeStanger commented on GitHub (Apr 20, 2026):

I've just for the first time ever had the original crash:

Assertion 'm->cached_next_time_event->enabled' failed at ../pulseaudio/src/pulse/mainloop.c:342, function mainloop_time_new(). Aborting.
Assertion 't = find_next_time_event(m)' failed at ../pulseaudio/src/pulse/mainloop.c:740, function calc_next_timeout(). Aborting.

No idea what the repro steps are, was doing nothing at the time other than listening to music.

<!-- gh-comment-id:4283932926 --> @JakeStanger commented on GitHub (Apr 20, 2026): I've just for the first time ever had the original crash: ``` Assertion 'm->cached_next_time_event->enabled' failed at ../pulseaudio/src/pulse/mainloop.c:342, function mainloop_time_new(). Aborting. Assertion 't = find_next_time_event(m)' failed at ../pulseaudio/src/pulse/mainloop.c:740, function calc_next_timeout(). Aborting. ``` No idea what the repro steps are, was doing nothing at the time other than listening to music.
Author
Owner

@orestisfl commented on GitHub (Apr 24, 2026):

I managed to reproduce this reliably:

Reproduction script
#!/usr/bin/env bash
set -euo pipefail

DURATION="${1:-30}"
IRONBAR_BIN='target/release/ironbar'

if pgrep -x ironbar >/dev/null; then
  echo "Another ironbar is running"
  exit 1
fi

mapfile -t SINKS < <(pactl list short sinks | awk '{print $2}')
if (( ${#SINKS[@]} < 2 )); then
  echo "Need at least 2 PulseAudio sinks; found ${#SINKS[@]}." >&2
  exit 1
fi

WORK="$(mktemp -d -t ironbar-repro-XXXXXX)"
ORIG="$(pactl get-default-sink)"
cleanup() {
  jobs -p | xargs -r kill 2>/dev/null || true
  pactl set-default-sink "$ORIG" >/dev/null 2>&1 || true
  rm -rf "$WORK"
}
trap cleanup EXIT

cat > "$WORK/config.json" <<JSON
{
  "anchor_to_edges": false, "height": 24, "position": "bottom",
  "end": [{ "type": "volume", "show_sinks": true, "show_sources": false, "show_monitors": false }]
}
JSON

IRONBAR_CONFIG="$WORK/config.json" XDG_DATA_HOME="$WORK/data" \
  "$IRONBAR_BIN" >"$WORK/ironbar.log" 2>&1 &
IRONBAR_PID=$!
sleep 3
echo "ironbar PID $IRONBAR_PID, ${#SINKS[@]} sinks, ${DURATION}s..."

deadline=$(( $(date +%s) + DURATION ))
alive() { kill -0 "$IRONBAR_PID" 2>/dev/null && (( $(date +%s) < deadline )); }
workers=()

for _ in 1 2; do
  ( i=0; while alive; do
      pactl set-default-sink "${SINKS[$(( i % ${#SINKS[@]} ))]}" >/dev/null 2>&1 || true
      i=$(( i + 1 ))
    done ) &
  workers+=($!)
done
( while alive; do pactl set-sink-mute @DEFAULT_SINK@ toggle >/dev/null 2>&1 || true; done ) &
workers+=($!)
( i=0; while alive; do
    (( i & 1 )) && v=50 || v=70
    pactl set-sink-volume @DEFAULT_SINK@ "${v}%" >/dev/null 2>&1 || true
    i=$(( i + 1 ))
  done ) &
workers+=($!)

wait "${workers[@]}"

if kill -0 "$IRONBAR_PID" 2>/dev/null; then
  echo "PASS: ironbar survived ${DURATION}s"
  exit 0
else
  echo "FAIL: ironbar died"
  grep -E 'Assertion|Aborting' "$WORK/ironbar.log" || tail -5 "$WORK/ironbar.log"
  exit 1
fi

Crashes with:

Assertion 'q->front' failed at ../pulseaudio/src/pulsecore/queue.c:81, function pa_queue_push(). Aborting.

My understanding is that two threads concurrently call the thread-unsafe libpulse C API on the same pa_context:

From the libpulse-binding crate:

//! To use the libraries in a threaded environment, you must assure that all objects are only used
//! in one thread at a time. Normally, this means that all objects belonging to a single context
//! must be accessed from the same thread.
//!
//! The included main loop implementation is also not thread safe. Take care to make sure event
//! objects are not manipulated when any other code is using the main loop.

A safer design for example could be a "single-writer" pattern where:

  1. only the mainloop thread calls the introspector after iterate returns
  2. a pub API which calls libpulse-binding's to wake the loop:
/// Interrupts a running poll (for threaded systems).
#[inline]
pub fn wakeup(&mut self) {
    unsafe { capi::pa_mainloop_wakeup(self._inner.get_ptr()); }
}
  1. mainloop wakes up and executes the actual commands (libpulse setters)
<!-- gh-comment-id:4316090715 --> @orestisfl commented on GitHub (Apr 24, 2026): I managed to reproduce this reliably: <details> <summary>Reproduction script</summary> ```sh #!/usr/bin/env bash set -euo pipefail DURATION="${1:-30}" IRONBAR_BIN='target/release/ironbar' if pgrep -x ironbar >/dev/null; then echo "Another ironbar is running" exit 1 fi mapfile -t SINKS < <(pactl list short sinks | awk '{print $2}') if (( ${#SINKS[@]} < 2 )); then echo "Need at least 2 PulseAudio sinks; found ${#SINKS[@]}." >&2 exit 1 fi WORK="$(mktemp -d -t ironbar-repro-XXXXXX)" ORIG="$(pactl get-default-sink)" cleanup() { jobs -p | xargs -r kill 2>/dev/null || true pactl set-default-sink "$ORIG" >/dev/null 2>&1 || true rm -rf "$WORK" } trap cleanup EXIT cat > "$WORK/config.json" <<JSON { "anchor_to_edges": false, "height": 24, "position": "bottom", "end": [{ "type": "volume", "show_sinks": true, "show_sources": false, "show_monitors": false }] } JSON IRONBAR_CONFIG="$WORK/config.json" XDG_DATA_HOME="$WORK/data" \ "$IRONBAR_BIN" >"$WORK/ironbar.log" 2>&1 & IRONBAR_PID=$! sleep 3 echo "ironbar PID $IRONBAR_PID, ${#SINKS[@]} sinks, ${DURATION}s..." deadline=$(( $(date +%s) + DURATION )) alive() { kill -0 "$IRONBAR_PID" 2>/dev/null && (( $(date +%s) < deadline )); } workers=() for _ in 1 2; do ( i=0; while alive; do pactl set-default-sink "${SINKS[$(( i % ${#SINKS[@]} ))]}" >/dev/null 2>&1 || true i=$(( i + 1 )) done ) & workers+=($!) done ( while alive; do pactl set-sink-mute @DEFAULT_SINK@ toggle >/dev/null 2>&1 || true; done ) & workers+=($!) ( i=0; while alive; do (( i & 1 )) && v=50 || v=70 pactl set-sink-volume @DEFAULT_SINK@ "${v}%" >/dev/null 2>&1 || true i=$(( i + 1 )) done ) & workers+=($!) wait "${workers[@]}" if kill -0 "$IRONBAR_PID" 2>/dev/null; then echo "PASS: ironbar survived ${DURATION}s" exit 0 else echo "FAIL: ironbar died" grep -E 'Assertion|Aborting' "$WORK/ironbar.log" || tail -5 "$WORK/ironbar.log" exit 1 fi ``` </details> Crashes with: ``` Assertion 'q->front' failed at ../pulseaudio/src/pulsecore/queue.c:81, function pa_queue_push(). Aborting. ``` My understanding is that two threads concurrently call the thread-unsafe libpulse C API on the same `pa_context`: - https://github.com/JakeStanger/ironbar/blob/742fe7f4f196185016bb2363682ab7a60bc70e40/src/clients/volume/sink.rs#L115 - https://github.com/JakeStanger/ironbar/blob/742fe7f4f196185016bb2363682ab7a60bc70e40/src/clients/volume/mod.rs#L235 From the libpulse-binding crate: ```rust //! To use the libraries in a threaded environment, you must assure that all objects are only used //! in one thread at a time. Normally, this means that all objects belonging to a single context //! must be accessed from the same thread. //! //! The included main loop implementation is also not thread safe. Take care to make sure event //! objects are not manipulated when any other code is using the main loop. ``` A safer design for example could be a "single-writer" pattern where: 1. only the mainloop thread calls the introspector after `iterate` returns 2. a `pub` API which calls libpulse-binding's to wake the loop: ```rust /// Interrupts a running poll (for threaded systems). #[inline] pub fn wakeup(&mut self) { unsafe { capi::pa_mainloop_wakeup(self._inner.get_ptr()); } } ``` 3. mainloop wakes up and executes the actual commands (libpulse setters)
Author
Owner

@JakeStanger commented on GitHub (Apr 25, 2026):

Thanks for the repro script and the pointers, that's been a great help.

I wasn't able to go the wakeup route exactly. I'm not exactly sure how you're supposed to, because Mainloop isn't thread-safe. I guess you're supposed to use unsafe to move pointers around and just take the safety into your own hands? Not the loveliest experience.

Anyway...I have been able to replace it with the threaded Mainloop, which can be passed to other threads, and I've implemented the single-writer pattern which has tidied up the code.

It's still crashing with the repro script, but under general use it seems more stable - I've been running EasyEffects for a few days & have been able to fairly consistently crash the bar by ie seeking quickly through a YT video, but so far have not been able to with the refactored version.

The current thinking is that the script is probably producing an overwhelming amount of messages that actually ends up overflowing the Pulse events buffer. I'm not sure exactly how we handle that yet, but trying to deduplicate seems key.

For now the refactored version is available in #1469 to test.


EDIT: I've added some basic checks to avoid duplicate calls (just in the area the script runs for now). The bar still crashed, but lasted longer, and we've got a new error:

Assertion 'e->mainloop->n_enabled_defer_events > 0' failed at ../pulseaudio/src/pulse/mainloop.c:261, function mainloop_defer_enable(). Aborting.
<!-- gh-comment-id:4320745470 --> @JakeStanger commented on GitHub (Apr 25, 2026): Thanks for the repro script and the pointers, that's been a great help. I wasn't able to go the `wakeup` route exactly. I'm not exactly sure how you're supposed to, because `Mainloop` isn't thread-safe. I guess you're supposed to use `unsafe` to move pointers around and just take the safety into your own hands? Not the loveliest experience. Anyway...I have been able to replace it with the threaded `Mainloop`, which *can* be passed to other threads, and I've implemented the single-writer pattern which has tidied up the code. It's still crashing with the repro script, but under general use it seems more stable - I've been running EasyEffects for a few days & have been able to fairly consistently crash the bar by ie seeking quickly through a YT video, but so far have not been able to with the refactored version. The current thinking is that the script is probably producing an overwhelming amount of messages that actually ends up overflowing the Pulse events buffer. I'm not sure exactly how we handle that yet, but trying to deduplicate seems key. For now the refactored version is available in #1469 to test. --- EDIT: I've added some basic checks to avoid duplicate calls (just in the area the script runs for now). The bar still crashed, but lasted longer, and we've got a new error: ``` Assertion 'e->mainloop->n_enabled_defer_events > 0' failed at ../pulseaudio/src/pulse/mainloop.c:261, function mainloop_defer_enable(). Aborting. ```
Author
Owner

@orestisfl commented on GitHub (Apr 26, 2026):

I wasn't able to go the wakeup route exactly. I'm not exactly sure how you're supposed to, because Mainloop isn't thread-safe. I guess you're supposed to use unsafe to move pointers around and just take the safety into your own hands? Not the loveliest experience.

Yeah I noticed that. Maybe it's worth upstreaming the change in the library first? I can take a look.

The current thinking is that the script is probably producing an overwhelming amount of messages that actually ends up overflowing the Pulse events buffer. I'm not sure exactly how we handle that yet, but trying to deduplicate seems key.

I do have a draft that uses unsafe and makes the script pass so it seems pulseaudio is able to handle it.

<!-- gh-comment-id:4321567276 --> @orestisfl commented on GitHub (Apr 26, 2026): > I wasn't able to go the `wakeup` route exactly. I'm not exactly sure how you're supposed to, because `Mainloop` isn't thread-safe. I guess you're supposed to use `unsafe` to move pointers around and just take the safety into your own hands? Not the loveliest experience. Yeah I noticed that. Maybe it's worth upstreaming the change in the library first? I can take a look. > The current thinking is that the script is probably producing an overwhelming amount of messages that actually ends up overflowing the Pulse events buffer. I'm not sure exactly how we handle that yet, but trying to deduplicate seems key. I do have a draft that uses unsafe and makes the script pass so it seems pulseaudio is able to handle it.
Author
Owner

@JakeStanger commented on GitHub (Apr 26, 2026):

I'm happy to accept unsafe code so long as it's minimised/sensible/commented. If you've got something working then feel free to supersede my PR!

<!-- gh-comment-id:4321693074 --> @JakeStanger commented on GitHub (Apr 26, 2026): I'm happy to accept unsafe code so long as it's minimised/sensible/commented. If you've got something working then feel free to supersede my PR!
Author
Owner

@JakeStanger commented on GitHub (May 2, 2026):

I've just opened a 2nd PR that uses the sync mainloop as before, with some unsafe code. For me this still crashes, which means either I'm still doing something wrong, or it's environmental (big powerful CPU = easier to overwhelm queue maybe?).

I'd be interested to see if this is the case for other people. Could anybody willing please try both branches with the test script and see if it crashes?

<!-- gh-comment-id:4364782779 --> @JakeStanger commented on GitHub (May 2, 2026): I've just opened a 2nd PR that uses the sync mainloop as before, with some unsafe code. For me this still crashes, which means either I'm still doing something wrong, or it's environmental (big powerful CPU = easier to overwhelm queue maybe?). I'd be interested to see if this is the case for other people. Could anybody willing please try both branches with the [test script](https://github.com/JakeStanger/ironbar/issues/875#issuecomment-4316090715) and see if it crashes?
Author
Owner

@Funtimes909 commented on GitHub (May 3, 2026):

Tested both crash fix branches (as well as the master branch)
Master branch crashes both times (first run no music, second run with music)

Image

fix/volume-crash does not crash either time

Image

fix/volume-crash2 crashes both times

Image

Script looks like it mentions something about saving logs to a file in a created directory in /tmp? but I couldn't find any files in the directory, so none are included.

The two sinks are two unique bluetooth headphones.

neofetch for system specs

Image

All three binaries were built in release mod (cargo build --release) and all tests were done two times, once while playing music (feishin) and once while not playing anything.

Hope this helps

<!-- gh-comment-id:4365408166 --> @Funtimes909 commented on GitHub (May 3, 2026): Tested both crash fix branches (as well as the master branch) Master branch crashes both times (first run no music, second run with music) <img width="1659" height="315" alt="Image" src="https://github.com/user-attachments/assets/85b715aa-eaa0-47ad-9b5a-46b6d2f286c5" /> fix/volume-crash does not crash either time <img width="646" height="229" alt="Image" src="https://github.com/user-attachments/assets/230a9a66-829a-4fbb-81d1-03f83bda8529" /> fix/volume-crash2 crashes both times <img width="1601" height="307" alt="Image" src="https://github.com/user-attachments/assets/6be1dfe8-ac82-4135-8eb5-0be13db51e22" /> Script looks like it mentions something about saving logs to a file in a created directory in /tmp? but I couldn't find any files in the directory, so none are included. The two sinks are two unique bluetooth headphones. neofetch for system specs <img width="1085" height="438" alt="Image" src="https://github.com/user-attachments/assets/2e121eed-8f96-49f8-8135-3a33568ba940" /> All three binaries were built in release mod (cargo build --release) and all tests were done two times, once while playing music (feishin) and once while not playing anything. Hope this helps
Author
Owner

@JakeStanger commented on GitHub (May 6, 2026):

It's taken until now to realise the repro script uses target/release/ironbar which means...I have to compile in release mode to test 🤦 🤦 🤦

After redoing my own testing properly on a couple of devices, I've found the same results. Thanks very much for the thorough test! I'm going to merge the 1st branch & finally close this issue.

Any other issues, let me know & we can re-open or open a new issue.

<!-- gh-comment-id:4392237674 --> @JakeStanger commented on GitHub (May 6, 2026): It's taken until now to realise the repro script uses `target/release/ironbar` which means...I have to compile in release mode to test 🤦 🤦 🤦 After redoing my own testing properly on a couple of devices, I've found the same results. Thanks very much for the thorough test! I'm going to merge the 1st branch & finally close this issue. Any other issues, let me know & we can re-open or open a new issue.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
JakeStanger/ironbar#264
No description provided.