Crash when trying to combine a virtual and a hardware sink
Summary
PulseAudio segfaults when trying to use a module-combine-sink
to combine an uplink sink by module-virtual-output
and a hardware sink.
environment
Steps to reproduce
$ pacmd load-module module-virtual-source source_name=virtual_input uplink_sink=virtual_output
$ pacmd load-module module-combine-sink slaves=alsa_output.pci-0000_00_1f.3.analog-stereo,virtual_output
What is the current bug behavior?
PulseAudio crashes.
Thread 4 (Thread 0x7f4795bd9700 (LWP 395660)):
#0 0x00007f479b64fae6 in ppoll () from /usr/lib/libc.so.6
#1 0x00007f479b5005b5 in ppoll (__ss=0x0, __timeout=<optimized out>, __nfds=<optimized out>, __fds=<optimized out>) at /usr/include/bits/poll2.h:77
#2 pa_rtpoll_run (p=0x561c89108600) at ../pulseaudio/src/pulsecore/rtpoll.c:314
#3 0x00007f4795d2c3ef in thread_func (userdata=0x561c89108370) at ../pulseaudio/src/modules/alsa/alsa-sink.c:1978
#4 0x00007f479b441d1c in ?? () from /usr/lib/pulseaudio/libpulsecommon-13.0.so
#5 0x00007f479ac3f4cf in start_thread () from /usr/lib/libpthread.so.0
#6 0x00007f479b65a2d3 in clone () from /usr/lib/libc.so.6
Thread 3 (Thread 0x7f479a4ec600 (LWP 395640)):
#0 0x00007f479ac48704 in do_futex_wait.constprop () from /usr/lib/libpthread.so.0
#1 0x00007f479ac487f8 in __new_sem_wait_slow.constprop.0 () from /usr/lib/libpthread.so.0
#2 0x00007f479b4453d4 in pa_semaphore_wait () from /usr/lib/pulseaudio/libpulsecommon-13.0.so
#3 0x00007f479b522104 in pa_asyncmsgq_send (a=0x561c8917dc50, object=<optimized out>, code=<optimized out>, userdata=<optimized out>, offset=<optimized out>, chunk=<optimized out>) at ../pulseaudio/src/pulsecore/asyncmsgq.c:168
#4 0x00007f479b4e93c3 in pa_sink_input_put (i=0x561c892f2710) at ../pulseaudio/src/pulsecore/msgobject.h:44
#5 0x00007f4794b6eff9 in output_enable (o=0x561c892b9570) at ../pulseaudio/src/modules/module-combine-sink.c:1132
#6 0x00007f4794b6f075 in output_verify (o=<optimized out>) at ../pulseaudio/src/modules/module-combine-sink.c:1166
#7 0x00007f4794b72615 in module_combine_sink_LTX_pa__init (m=0x561c892855c0) at ../pulseaudio/src/modules/module-combine-sink.c:1517
#8 0x00007f479b50e1c6 in pa_module_load (module=0x7fffa24ff630, c=0x561c88e5fec0, name=0x561c89293650 "module-combine-sink", argument=0x561c8926e0a0 "slaves=alsa_output.pci-0000_00_1f.3.analog-stereo,virtual_output") at ../pulseaudio/src/pulsecore/module.c:191
#9 0x00007f479b51f72f in pa_cli_command_load (c=0x561c88e5fec0, t=0x561c892949c0, buf=0x561c892d2710, fail=0x561c892cd5f8) at ../pulseaudio/src/pulsecore/cli-command.c:437
#10 0x00007f479b518f1d in pa_cli_command_execute_line_stateful (c=0x561c88e5fec0, s=s@entry=0x561c890d3cf0 "load-module module-combine-sink slaves=alsa_output.pci-0000_00_1f.3.analog-stereo,virtual_output", buf=buf@entry=0x561c892d2710, fail=fail@entry=0x561c892cd5f8, ifstate=ifstate@entry=0x0) at ../pulseaudio/src/pulsecore/cli-command.c:2141
#11 0x00007f479b519ba9 in pa_cli_command_execute_line (c=<optimized out>, s=s@entry=0x561c890d3cf0 "load-module module-combine-sink slaves=alsa_output.pci-0000_00_1f.3.analog-stereo,virtual_output", buf=buf@entry=0x561c892d2710, fail=fail@entry=0x561c892cd5f8) at ../pulseaudio/src/pulsecore/cli-command.c:2162
#12 0x00007f4794b7931c in line_callback (line=0x561c891f9000, s=<optimized out>, userdata=0x561c892cd5d0) at ../pulseaudio/src/pulsecore/cli.c:153
#13 0x00007f479b463191 in ?? () from /usr/lib/pulseaudio/libpulsecommon-13.0.so
#14 0x00007f479b3f0b93 in pa_mainloop_dispatch () from /usr/lib/libpulse.so.0
#15 0x00007f479b3f4311 in pa_mainloop_iterate () from /usr/lib/libpulse.so.0
#16 0x00007f479b3f43b1 in pa_mainloop_run () from /usr/lib/libpulse.so.0
#17 0x0000561c86ed8c7b in main (argc=<optimized out>, argv=<optimized out>) at ../pulseaudio/src/daemon/main.c:1165
Thread 2 (Thread 0x7f4794b6a700 (LWP 398009)):
#0 0x00007f479b64fae6 in ppoll () from /usr/lib/libc.so.6
#1 0x00007f479b5005b5 in ppoll (__ss=0x0, __timeout=<optimized out>, __nfds=<optimized out>, __fds=<optimized out>) at /usr/include/bits/poll2.h:77
#2 pa_rtpoll_run (p=0x561c89286940) at ../pulseaudio/src/pulsecore/rtpoll.c:314
#3 0x00007f4794b7124b in thread_func (userdata=0x561c891fb020) at ../pulseaudio/src/modules/module-combine-sink.c:353
#4 thread_func (userdata=0x561c891fb020) at ../pulseaudio/src/modules/module-combine-sink.c:315
#5 0x00007f479b441d1c in ?? () from /usr/lib/pulseaudio/libpulsecommon-13.0.so
#6 0x00007f479ac3f4cf in start_thread () from /usr/lib/libpthread.so.0
#7 0x00007f479b65a2d3 in clone () from /usr/lib/libc.so.6
Thread 1 (Thread 0x7f47953d8700 (LWP 395661)):
#0 0x00007f479b596f25 in raise () from /usr/lib/libc.so.6
#1 0x00007f479b580897 in abort () from /usr/lib/libc.so.6
#2 0x00007f479b4e8570 in pa_sink_input_assert_ref (o=<optimized out>) at ../pulseaudio/src/pulsecore/sink-input.h:261
#3 pa_sink_input_assert_ref (o=<optimized out>) at ../pulseaudio/src/pulsecore/sink-input.h:261
#4 pa_sink_input_process_rewind (i=<optimized out>, nbytes=<optimized out>) at ../pulseaudio/src/pulsecore/sink-input.c:1070
#5 0x00007f479b4f5401 in pa_sink_process_rewind (s=0x561c8910b000, nbytes=0) at ../pulseaudio/src/pulsecore/sink.c:1059
#6 0x00007f4794b6f844 in sink_input_attach_cb (i=0x561c892f2710) at ../pulseaudio/src/modules/module-combine-sink.c:553
#7 0x00007f479b4ed544 in pa_sink_process_msg (o=0x561c8910b000, code=<optimized out>, userdata=0x561c892f2710, offset=0, chunk=<optimized out>) at ../pulseaudio/src/pulsecore/sink.c:2571
#8 0x00007f479b502d74 in asyncmsgq_read_work (i=0x561c8926cfd0) at ../pulseaudio/src/pulsecore/rtpoll.c:566
#9 0x00007f479b5004fc in pa_rtpoll_run (p=0x561c891840c0) at ../pulseaudio/src/pulsecore/rtpoll.c:236
#10 0x00007f4795d1ec3c in thread_func (userdata=0x561c89173d80) at ../pulseaudio/src/modules/alsa/alsa-source.c:1684
#11 0x00007f479b441d1c in ?? () from /usr/lib/pulseaudio/libpulsecommon-13.0.so
#12 0x00007f479ac3f4cf in start_thread () from /usr/lib/libpthread.so.0
#13 0x00007f479b65a2d3 in clone () from /usr/lib/libc.so.6
What is the expected correct behavior?
A combined sink is produced.