Arithmetic exception (SIGFPE) crash on pulse-bridge when trying to play song with Rhythmbox
I'm not entirely sure why pulse-bridge
is involved here, but whenever I try to play something with Rhythmbox, pipewire-media-session
crashes.
Backtrace:
Program terminated with signal SIGFPE, Arithmetic exception.
#0 0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
963 attr->maxlength = SPA_MAX(attr->maxlength, frame_size);
[Current thread is 1 (Thread 0x7f5a1a840400 (LWP 26693))]
(gdb) bt
#0 0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
#1 do_create_playback_stream (client=0x56310baf65b0, command=<optimized out>, tag=2, m=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:1168
#2 0x00007f5a19dea588 in handle_packet (msg=0x56310bb3d580, client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2535
#3 do_read (client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2658
#4 on_client_data (data=0x56310baf65b0, fd=<optimized out>, mask=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:2693
#5 0x00007f5a1b08eb7b in loop_iterate (object=0x56310b920f78, timeout=<optimized out>) at ../spa/plugins/support/loop.c:306
#6 0x00007f5a1b015f1b in pw_main_loop_run (loop=0x56310b920e30) at ../src/pipewire/main-loop.c:156
#7 0x000056310b86509f in main (argc=<optimized out>, argv=<optimized out>) at ../src/examples/media-session/media-session.c:2235
It seems that, in fuction fix_playback_buffer_attr()
, the variable frame_size
(which comes from s->frame_size
) is set to 0. This value is used at attr->maxlength -= attr->maxlength % frame_size
. The C spec says that mod with zero is undefined.
The full backtrace is:
Program terminated with signal SIGFPE, Arithmetic exception.
#0 0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
963 attr->maxlength = SPA_MAX(attr->maxlength, frame_size);
[Current thread is 1 (Thread 0x7f5a1a840400 (LWP 26693))]
(gdb) bt
#0 0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
#1 do_create_playback_stream (client=0x56310baf65b0, command=<optimized out>, tag=2, m=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:1168
#2 0x00007f5a19dea588 in handle_packet (msg=0x56310bb3d580, client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2535
#3 do_read (client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2658
#4 on_client_data (data=0x56310baf65b0, fd=<optimized out>, mask=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:2693
#5 0x00007f5a1b08eb7b in loop_iterate (object=0x56310b920f78, timeout=<optimized out>) at ../spa/plugins/support/loop.c:306
#6 0x00007f5a1b015f1b in pw_main_loop_run (loop=0x56310b920e30) at ../src/pipewire/main-loop.c:156
#7 0x000056310b86509f in main (argc=<optimized out>, argv=<optimized out>) at ../src/examples/media-session/media-session.c:2235
(gdb) bt full
#0 0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
frame_size = 0
max_prebuf = <optimized out>
minreq = <optimized out>
frame_size = <optimized out>
max_prebuf = <optimized out>
minreq = <optimized out>
_a = <optimized out>
_b = <optimized out>
_a = <optimized out>
_b = <optimized out>
process = <optimized out>
m = <optimized out>
_a = <optimized out>
_b = <optimized out>
_a = <optimized out>
_b = <optimized out>
_a = <optimized out>
_b = <optimized out>
#1 do_create_playback_stream (client=0x56310baf65b0, command=<optimized out>, tag=2, m=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:1168
impl = <optimized out>
name = 0x0
res = <optimized out>
ss = {format = 255, rate = 0, channels = 0 '\000'}
map = {channels = 0 '\000', map = {32766, 246829568, 420952383, 194265360, 22065, 194269072, 22065, 0, 0, 664, 0, 4204047584, 32766, 436108696, 32602, 194269000, 22065, 453686053, 32602, 3061135916, 0, 1, 0, 452798416, 32602, 193244872, 22065, 5, 0, 453687284, 32602, 105, 0, 452810432, 32602, 453459968, 32602, 4204047432, 32766, 4204047428, 32766, 435979909, 32602, 664, 0, 0, 32602, 452810432, 32602, 452799776, 32602, 193245487, 22065, 3061135916, 0, 47830248, 0,
4204047428, 32766, 446209160, 32602, 4204047632, 32766, 193244872}}
sink_index = 4294967295
syncid = 0
sink_name = 0x0
attr = {maxlength = 4294967295, tlength = 48000, prebuf = 4294967295, minreq = 4294967295, fragsize = 4204047072}
corked = true
no_remap = false
no_remix = false
fix_format = false
fix_rate = false
fix_channels = false
no_move = false
variable_rate = false
muted = false
adjust_latency = true
early_requests = false
dont_inhibit_auto_suspend = false
volume_set = false
muted_set = false
fail_on_suspend = false
relative_volume = false
passthrough = false
volume = {channels = 32 ' ', values = {1 <repeats 32 times>, 3.09196506e-41, 2.63240959e-23, 4.56851325e-41, 2.63490145e-23, 4.56851325e-41, 1.47136339e-43, 0, 5.60519386e-44, 0, 2.62018083e-23, 4.56851325e-41, 1.16545326e-22, 4.56851325e-41, 0, 1.96181785e-44, -3.86008481e+35, 4.59149455e-41, 9.57108149e-23, 4.56851325e-41, -nan(0x7fffff), 0, 5.73971851e-42, 0, 1.04727154e-22, 4.56851325e-41, 0, 0, 0, 0, 0, 0, 7.73516752e-43}}
props = 0x56310baf86b0
n_formats = 1 '\001'
formats = <optimized out>
stream = 0x56310baf8960
info = {format = 4, flags = 4, rate = 1073742317, channels = 0, position = {2, 0, 193815488, 22065, 48, 48, 449783044, 32602, 4204047744, 32766, 0, 0, 196334800, 22065, 0, 0, 436113745, 32602, 194665360, 22065, 194665360, 22065, 435994628, 32602, 4204048768, 32766, 246829568, 420952383, 194343360, 22065, 194347056, 22065, 194343360, 22065, 40, 0, 6, 0, 436108696, 32602, 194346984, 22065, 435996050, 32602, 194355456, 22065, 436115278, 32602, 436131072, 32602, 105,
0, 40, 0, 436037769, 32602, 0, 0, 194343360, 14, 194355456, 22065, 0, 0}}
n_params = <optimized out>
flags = <optimized out>
params = {0x7ffefa94baf0}
buffer = "г\224\372\376\177\000\000\002\000\000\000\000\000\000\000\300Z\213\v1V\000\000\340s\347\032Z\177\000\000@\265\224\372\376\177\000\000\b\362\321\032Z\177\000\000\276Z\213\v1V\000\000\002\000\000\000\000\000\000\000h\r", '\000' <repeats 18 times>, "\376\177\000\000 7\254\v1V\000\000\060\000\000\000\n\000\000\000\000\000\000\000\376\177", '\000' <repeats 18 times>, "\276Z\213\v1V\000\000\000\000\000\000Z\177\000\000\004\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377X\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000 p\347\032Z\177\000\000\000\000\000\000\000\000\000\000\260\213\344\032Z\177", '\000' <repeats 11 times>...
b = {data = 0x7ffefa94ae50, size = 4096, _padding = 0, state = {offset = 0, flags = 0, frame = 0x0}, callbacks = {funcs = 0x0, data = 0x0}}
str = <optimized out>
__func__ = "do_create_playback_stream"
#2 0x00007f5a19dea588 in handle_packet (msg=0x56310bb3d580, client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2535
impl = <optimized out>
command = 3
res = 0
tag = 2
impl = <optimized out>
res = <optimized out>
command = <optimized out>
tag = <optimized out>
__func__ = "handle_packet"
_err = <optimized out>
#3 do_read (client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2658
msg = 0x56310bb3d580
impl = <optimized out>
data = <optimized out>
size = <optimized out>
r = <optimized out>
res = 0
impl = <optimized out>
data = <optimized out>
size = <optimized out>
r = <optimized out>
res = <optimized out>
__func__ = "do_read"
idx = <optimized out>
flags = <optimized out>
length = <optimized out>
channel = <optimized out>
msg = <optimized out>
#4 on_client_data (data=0x56310baf65b0, fd=<optimized out>, mask=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:2693
client = 0x56310baf65b0
impl = 0x56310b9a5b90
res = <optimized out>
__func__ = "on_client_data"
#5 0x00007f5a1b08eb7b in loop_iterate (object=0x56310b920f78, timeout=<optimized out>) at ../spa/plugins/support/loop.c:306
s = <optimized out>
impl = 0x56310b920f78
loop = 0x56310b920f90
ep = {{events = 1, data = 0x56310baf7590}, {events = 1, data = 0x56310b96a1f0}, {events = 4, data = 0x56310b96a1f0}, {events = 1, data = 0x56310b9861f0}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 15, data = 0x56310b98ecc0}, {events = 194472016, data = 0x5}, {events = 434049137, data = 0x7f5a1b025259 <do_replace+153>}, {events = 1000, data = 0x56310b976280}, {events = 194472016, data = 0x100001000}, {events = 0,
data = 0x7f5a19df65a0 <stream_events>}, {events = 2, data = 0x800000000000000e}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 194665056, data = 0x56310b987200}, {events = 194665056, data = 0x7f5a1b018786 <pw_impl_module_update_properties+22>}, {events = 0, data = 0x56310b9a5ae8}, {events = 194155464, data = 0x56310b9293c8}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 0, data = 0x1917393f0eb65200}, {
events = 194471856, data = 0x56310b9a5ae8}, {events = 194665056, data = 0x7ffefa94c0d0}, {events = 194472016, data = 0x56310b977530}, {events = 193815720, data = 0x7f5a1b0182e1 <pw_context_load_module+753>}, {events = 194155104, data = 0x56310b9a5a60}, {events = 0, data = 0x7f5a19de45d0 <pipewire__module_init>}, {events = 194540048, data = 0x56310b9a5ae8}, {events = 0, data = 0x0}, {events = 0, data = 0x0}}
i = 0
nfds = <optimized out>
#6 0x00007f5a1b015f1b in pw_main_loop_run (loop=0x56310b920e30) at ../src/pipewire/main-loop.c:156
_f = <optimized out>
_res = -95
_o = <optimized out>
res = 0
__func__ = "pw_main_loop_run"
#7 0x000056310b86509f in main (argc=<optimized out>, argv=<optimized out>) at ../src/examples/media-session/media-session.c:2235
impl = {this = {session = 0x0, props = 0x56310b920ce0, session_id = 0, client_session = 0x0, loop = 0x56310b920e60, context = 0x56310b929260, dbus_connection = 0x56310b9413a0, metadata = 0x56310b96a780, info = 0x56310b9b8da0}, loop = 0x56310b920e30, dbus = 0x56310b932930, monitor_core = 0x56310b944110, monitor_listener = {link = {next = 0x56310b944168, prev = 0x56310b9441b8}, cb = {funcs = 0x56310b8ca360 <monitor_core_events>, data = 0x7ffefa94c1d0},
removed = 0x0, priv = 0x0}, monitor_seq = 1073741846, policy_core = 0x56310b9571c0, policy_listener = {link = {next = 0x56310b957218, prev = 0x56310b957268}, cb = {funcs = 0x56310b8ca300 <policy_core_events>, data = 0x7ffefa94c1d0}, removed = 0x0, priv = 0x0}, proxy_policy_listener = {link = {next = 0x56310b957208, prev = 0x56310b957298}, cb = {funcs = 0x56310b8ca2c0 <proxy_core_events>, data = 0x7ffefa94c1d0}, removed = 0x0, priv = 0x0},
registry = 0x56310b96a260, registry_listener = {link = {next = 0x56310b96a2b8, prev = 0x56310b96a2b8}, cb = {funcs = 0x56310b8ca3f0 <registry_events>, data = 0x7ffefa94c1d0}, removed = 0x0, priv = 0x0}, globals = {items = {data = 0x56310baa7660, size = 856, alloc = 1024, extend = 64}, free_list = 4294967295}, global_list = {next = 0x56310b99fe38, prev = 0x56310baf7be8}, hooks = {list = {next = 0x56310b96a2e8, prev = 0x56310b9a5428}}, endpoint_link_list = {
next = 0x7ffefa94c350, prev = 0x7ffefa94c350}, endpoint_links = {items = {data = 0x56310b941180, size = 0, alloc = 512, extend = 64}, free_list = 4294967295}, link_list = {next = 0x56310bad1e18, prev = 0x56310baf3aa8}, sync_list = {next = 0x7ffefa94c398, prev = 0x7ffefa94c398}, rescan_seq = 1073742388, last_seq = 1073742389, state_dir_fd = 19, state_dir = "/home/feaneron/.config/pipewire-media-session/", '\000' <repeats 4049 times>}
support = <optimized out>
n_support = 8
res = <optimized out>
c = <optimized out>
opt_enabled = <optimized out>
opt_disabled = 0x56310b8aede2 ""
opt_properties = <optimized out>
long_options = {{name = 0x56310b8b3f4a "help", has_arg = 0, flag = 0x0, val = 104}, {name = 0x56310b8b3f4f "version", has_arg = 0, flag = 0x0, val = 86}, {name = 0x56310b8b3f57 "enabled", has_arg = 1, flag = 0x0, val = 101}, {name = 0x56310b8b3f5f "disabled", has_arg = 1, flag = 0x0, val = 100}, {name = 0x56310b8b3f68 "properties", has_arg = 1, flag = 0x0, val = 112}, {name = 0x0, has_arg = 0, flag = 0x0, val = 0}}
i = <optimized out>
item = <optimized out>
__func__ = "main"