On Tue, 2017-05-16 at 15:14 +0200, Georg Chini wrote: > When a filter is loaded and module-switch-on-connect is present, switch-on-connect > will make the filter the default sink or source and move streams from the old > default to the filter. This is done from the sink/source put hook, therefore streams > are moved to the filter before the module init function of the filter calls > sink_input_put() or source_output_put(). The move succeeds because the asyncmsq > already points to the queue of the master sink or source. When the master sink or > source is attached to the sink input or source output, the attach callback will call > pa_{sink,source}_attach_within_thread(). These functions assume that all streams > are detached. Because streams were already moved to the filter by switch-on-connect, > this assumption leads to an assertion in pa_{sink_input,source_output}_attach(). > > This patch fixes the problem by reverting the order of the pa_{sink,source}_put() > calls and the pa_{sink_input,source_output}_put calls and creating the sink input > or source output corked. The initial rewind that is done for the master sink is > moved to the sink message handler. The order of the unlink calls is swapped as well > to prevent that the filter appears to be moving during module unload. > > The patch also seems to improve user experience, the move of a stream to the filter > sink is now done without any audible interruption on my system. > > The patch is only tested for module-echo-cancel. > > Bug-Link: https://bugs.freedesktop.org/show_bug.cgi?id=100065 > --- > src/modules/echo-cancel/module-echo-cancel.c | 92 ++++++++++++++++++++-------- > src/modules/module-equalizer-sink.c | 64 +++++++++++-------- > src/modules/module-ladspa-sink.c | 64 +++++++++++-------- > src/modules/module-remap-sink.c | 65 ++++++++++++-------- > src/modules/module-remap-source.c | 36 +++++++---- > src/modules/module-virtual-sink.c | 64 +++++++++++-------- > src/modules/module-virtual-source.c | 35 ++++++++--- > src/modules/module-virtual-surround-sink.c | 64 +++++++++++-------- > 8 files changed, 306 insertions(+), 178 deletions(-) Looks good to me. -- Tanu https://www.patreon.com/tanuk