09.06.2015 12:08, arun at accosted.net wrote: > From: Arun Raghavan <git at arunraghavan.net> > > When we the underlying sink/source goes away, there is an intermediate > state where the asyncmsgqs that we were using for the sink-input and > source-output go away. This is usually okay if the sink-input and > source-output are moved to another device, but can be problematic if we > don't support moving (which is the case when the filter is autoloaded). > > This becomes a problem because of the following chain of events: > > * The underlying sink goes away > > * Moving the filter sink-input fails (because it is autloaded) > * At this point the sink-input has no underlying sink, and thus > no underlying asyncmsgq > * This also applies to all sink-inputs connected to the echo-cancel > module > > * The sink-input is killed, triggering a module unload > > * On unlink, module-rescue-streams tries to move sink-inputs to > another sink, starting with a START_MOVE message > > * There is no asyncmsgq for the message, so we crash > * We can't just perform a NULL check for the asyncmsgq, since there > are state changes we need to effect during the move > > To fix this, we pretend to allow the move to the new sink, and then > unlink ourselves *after* the move is complete. This ensures that we > never find ourselves in a position where we need the underlying > sink/asyncmsgq to be present when it is not. > > Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=90416 I see that there is also a patch for module-equalizer-sink, but no patches for module-remap-sink, module-virtual-surround-sink and module-virtual-sink (i.e. the example). If patches are not required there, it would be nice to mention this explicitly here in the commit message. I have not looked at the changes in detail, so cannot yet ACK the patches. -- Alexander E. Patrakov