[pulseaudio-tickets] [Bug 98617] New: unloading module-remap-sink while module-combine-sink is using it causes Assertion '*_head == _item' failed at modules/module-combine-sink.c:818, function output_remove_within_thread().

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Sun Nov 6 17:58:57 UTC 2016


https://bugs.freedesktop.org/show_bug.cgi?id=98617

            Bug ID: 98617
           Summary: unloading module-remap-sink while module-combine-sink
                    is using it causes Assertion '*_head == _item' failed
                    at modules/module-combine-sink.c:818, function
                    output_remove_within_thread().
           Product: PulseAudio
           Version: unspecified
          Hardware: x86-64 (AMD64)
                OS: Linux (All)
            Status: NEW
          Severity: normal
          Priority: medium
         Component: modules
          Assignee: pulseaudio-bugs at lists.freedesktop.org
          Reporter: freebugs at liftm.de
        QA Contact: pulseaudio-bugs at lists.freedesktop.org
                CC: lennart at poettering.net

Reproduction:
Bug can be invoked by loading a (one) remap sink on an actual sink, and then
loading a combine sink based on that, and then unloading the remap sink, e.g.:

UDJ6=$(insert some actual sink here)
remaps=$(pactl load-module module-remap-sink sink_name=udj6-3
sink_properties=device.description='UDJ6-3' remix=no master="$UDJ6" channels=2
master_channel_map=front-center,lfe channel_map=front-left,front-right)
pactl load-module module-combine-sink sink_name=udj6
sink_properties=device.description='UDJ6' slaves=udj6-3
pactl unload-module $remaps
# there may be other ways

Version: 9.0 (compiled both in release-mode as per gentoo's portage, and in
debug mode as per README)

Stack trace:
#0  0x00007ff6c363c118 in __GI_raise (sig=sig at entry=6) at
../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007ff6c363d56a in __GI_abort () at abort.c:89
#2  0x00007ff6a23b7829 in output_remove_within_thread (o=0x2078b60) at
modules/module-combine-sink.c:818
#3  0x00007ff6a23b7c2a in sink_process_msg (o=0x2082630, code=26,
data=0x2078b60, offset=0, chunk=0x0) at modules/module-combine-sink.c:901
#4  0x00007ff6c6d8402a in pa_asyncmsgq_dispatch (object=0x2082630, code=26,
userdata=0x2078b60, offset=0, memchunk=0x7ff6a23afd40) at
pulsecore/asyncmsgq.c:318
#5  0x00007ff6c6daba49 in asyncmsgq_read_work (i=0x203c510) at
pulsecore/rtpoll.c:566
#6  0x00007ff6c6daa775 in pa_rtpoll_run (p=0x203d510) at pulsecore/rtpoll.c:236
#7  0x00007ff6a23b5971 in thread_func (userdata=0x20468c0) at
modules/module-combine-sink.c:354
#8  0x00007ff6c644f3d8 in internal_thread_func (userdata=0x20352c0) at
pulsecore/thread-posix.c:81
#9  0x00007ff6c40b0394 in start_thread (arg=0x7ff6a23b0700) at
pthread_create.c:333
#10 0x00007ff6c36f0eed in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Background info:
I wanted to make some remap sinks automatically disappear when unplugging a USB
sink, so I added
diff -aur pulseaudio-9.0-orig/src/modules/module-remap-sink.c
pulseaudio-9.0/src/modules/module-remap-sink.c
--- pulseaudio-9.0-orig/src/modules/module-remap-sink.c 2016-05-03
08:17:39.000000000 +0200
+++ pulseaudio-9.0/src/modules/module-remap-sink.c      2016-11-06
17:28:37.196938338 +0100
@@ -423,7 +423,7 @@
     pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
     pa_sink_input_new_data_set_channel_map(&sink_input_data, &stream_map);
-    sink_input_data.flags = (remix ? 0 : PA_SINK_INPUT_NO_REMIX);
+    sink_input_data.flags = (remix ? 0 : PA_SINK_INPUT_NO_REMIX) |
PA_SINK_INPUT_DONT_MOVE;
     sink_input_data.resample_method = resample_method;
(The bug is invokable without this.)
That seems to work nicely, but in turn the combine sink I have on top of my
three remap sinks fails. I added some debug output to
output_remove_within_thread:
    pa_log("outputs list: around %p", o);
    PA_LLIST_FOREACH(it, o->userdata->thread_info.active_outputs)
        pa_log("p%p <- p%p -> p%p",it->prev,it,it->next);
Result:
E: [combine] module-combine-sink.c: outputs list: around 0x2078b60
E: [combine] module-combine-sink.c: p(nil) <- p0x20711d0 -> p0x20788a0
E: [combine] module-combine-sink.c: p0x20711d0 <- p0x20788a0 -> p0x2078b60
E: [combine] module-combine-sink.c: p0x20788a0 <- p0x2078b60 -> p(nil)
E: [combine] module-combine-sink.c: outputs list: around 0x2078b60
E: [combine] module-combine-sink.c: p(nil) <- p0x20711d0 -> p0x20788a0
E: [combine] module-combine-sink.c: p0x20711d0 <- p0x20788a0 -> p(nil)
E: [combine] module-combine-sink.c: Assertion '*_head == _item' failed at
modules/module-combine-sink.c:818, function output_remove_within_thread().

If I check whether the module is in the list and only remove it if so, three
outputs are removed twice. When attempting to play something again, the output
has significant crackling in it.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pulseaudio-bugs/attachments/20161106/957c735f/attachment.html>


More information about the pulseaudio-bugs mailing list