Filter chain segfault in 0.3.59
I am hitting a segmentation fault with pipewire 0.3.59 with the following config (which I have reduced to a minimal working example; the issue disappers when not piping into the convolvers or when removing the lv2 plugin):
context.properties = {
core.daemon = true
core.name = pipewire-0
default.clock.rate = 44100
default.clock.allowed-rates = [ 44100 ]
}
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
}
context.modules = [
{ name = libpipewire-module-rt }
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-profiler }
{ name = libpipewire-module-metadata }
{ name = libpipewire-module-spa-device-factory }
{ name = libpipewire-module-spa-node-factory }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-client-device }
{ name = libpipewire-module-portal }
{ name = libpipewire-module-access }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-link-factory }
{ name = libpipewire-module-session-manager }
{ name = libpipewire-module-filter-chain
args = { node.name = "main" node.description = "Speakers DSP Sink" media.name = "Speakers DSP Sink"
filter.graph = {
nodes = [
{ type = lv2 plugin = "http://lsp-plug.in/plugins/lv2/loud_comp_stereo" name = loudComp control = { "volume" = -30.0 } }
{ type = builtin label = convolver name = convL config = { filename = "/home/romain/.config/alsa/drc/filter-L.wav" channel = 0 } }
{ type = builtin label = convolver name = convR config = { filename = "/home/romain/.config/alsa/drc/filter-R.wav" channel = 1 } }
]
inputs = [ "loudComp:in_l" "loudComp:in_r" ]
links = [ { output = "loudComp:out_l" input = "convL:In" }
{ output = "loudComp:out_r" input = "convR:In" } ]
outputs = [ "convL:Out" "convR:Out" ]
}
# see https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/2299#note_1342506
capture.props { node.name = "dsp.capture" media.class = Audio/Sink audio.channels = 2 audio.position = [ FL FR ] }
playback.props { node.name = "dsp.playback" node.passive = true node.target = "alsa_output.usb-Yamaha_Corporation_Steinberg_UR22-00.pro-output-0" }
}
}
]
context.objects = [
{ factory = spa-node-factory
args = { factory.name = support.node.driver node.name = Dummy-Driver node.group = pipewire.dummy
priority.driver = 20000 } }
{ factory = spa-node-factory
args = { factory.name = support.node.driver node.name = Freewheel-Driver
priority.driver = 19000 node.group = pipewire.freewheel node.freewheel = true } }
]
This works as expected with 0.3.58, but with 0.3.59 I see this in my journal whenever some application tries to play audio:
Oct 08 15:51:02 Silmeria kernel: pipewire[50287]: segfault at 0 ip 00007fc97d8665e5 sp 00007fc981075858 error 6 in lsp-plugins-lv2-1.2.3.so[7fc97d833000+135000]
Oct 08 15:51:02 Silmeria kernel: Code: f2 0f f0 4c 06 10 f2 0f f0 54 06 20 f2 0f f0 5c 06 30 f2 0f f0 64 06 40 f2 0f f0 6c 06 50 f2 0f f0 74 06 60 f2 0f f0 7c 06 70 <0f> 11 04 07 0f 11 4c 07 10 0f 11 54 07 20 0f 11 5c 07 30 0f 11 64
And here is a gdb backtrace:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007fc97d8665e5 in lsp::sse3::copy (dst=0x0, src=0x561cd1aa9110, count=992) at /usr/src/debug/lsp-plugins/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse3/copy.h:37
37 /usr/src/debug/lsp-plugins/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse3/copy.h: Directory not empty.
[Current thread is 1 (Thread 0x7fc9810766c0 (LWP 50287))]
(gdb) bt
#0 0x00007fc97d8665e5 in lsp::sse3::copy (dst=0x0, src=0x561cd1aa9110, count=992) at /usr/src/debug/lsp-plugins/modules/lsp-dsp-lib/include/private/dsp/arch/x86/sse3/copy.h:37
#1 0x00007fc97d8fcefd in lsp::dspu::Bypass::process (count=1024, wet=<optimized out>, dry=<optimized out>, dst=<optimized out>, this=0x561cd1a9d02c)
at ../../lsp-dsp-units/src/main/ctl/Bypass.cpp:109
#2 lsp::plugins::loud_comp::process (this=0x561cd1729010, samples=1024) at ../../lsp-plugins-loud-comp/src/main/plug/loud_comp.cpp:550
#3 0x00007fc97d95e59d in lsp::lv2::Wrapper::run (samples=1024, this=0x561cd1715ca0)
at /usr/src/debug/lsp-plugins/modules/lsp-plugin-fw/include/lsp-plug.in/plug-fw/wrap/lv2/impl/wrapper.h:559
#4 lsp::lv2::run (instance=0x561cd1715ca0, sample_count=1024) at wrap/lv2.cpp:178
#5 0x00007fc9815eaed6 in lilv_instance_run (sample_count=<optimized out>, instance=<optimized out>) at /usr/include/lilv-0/lilv/lilv.h:1935
#6 lv2_run (instance=0x561cd19b2680, SampleCount=<optimized out>) at ../pipewire/src/modules/module-filter-chain/lv2_plugin.c:394
#7 0x00007fc9815db5f2 in playback_process (d=0x561cd167a1f0) at ../pipewire/src/modules/module-filter-chain.c:657
#8 0x00007fc98332f6b2 in call_process (impl=0x561cd17f8ac0) at ../pipewire/src/pipewire/stream.c:442
#9 impl_node_process_output (object=0x561cd17f8ac0) at ../pipewire/src/pipewire/stream.c:1084
#10 0x00007fc98108374a in follower_ready (data=0x561cd182ae48, status=<optimized out>) at ../pipewire/spa/plugins/audioconvert/audioadapter.c:1169
#11 0x00007fc983334dd2 in pw_stream_trigger_process (stream=0x561cd17f8ac0) at ../pipewire/src/pipewire/stream.c:2391
#12 pw_stream_trigger_process (stream=0x561cd17f8ac0) at ../pipewire/src/pipewire/stream.c:2375
#13 0x00007fc98332f353 in call_process (impl=0x561cd17f77b0) at ../pipewire/src/pipewire/stream.c:442
#14 impl_node_process_input (object=0x561cd17f77b0) at ../pipewire/src/pipewire/stream.c:1005
#15 0x00007fc981083999 in impl_node_process (object=0x561cd180a338) at ../pipewire/spa/plugins/audioconvert/audioadapter.c:1434
#16 0x00007fc98330fa79 in process_node (data=0x561cd1827e00) at ../pipewire/src/pipewire/impl-node.c:1120
#17 0x00007fc98330ff57 in node_on_fd_events (source=<optimized out>) at ../pipewire/src/pipewire/impl-node.c:1178
#18 0x00007fc9833aa337 in loop_iterate (object=<optimized out>, timeout=<optimized out>) at ../pipewire/spa/plugins/support/loop.c:431
#19 0x00007fc9832e8e87 in do_loop (user_data=0x561cd1624a80) at ../pipewire/src/pipewire/data-loop.c:81
#20 0x00007fc98313c8fd in start_thread (arg=<optimized out>) at pthread_create.c:442
#21 0x00007fc9831bdc74 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:100