# HG changeset patch # User Chris Cannam # Date 1286533197 -3600 # Node ID 5ee9e6bc21eb2cbbc659c119375bc9921dba6b9d # Parent aafbb79e93d47edbbd888d6dadb49e9bec6c9f58 * Use a mutex when setting auditioning plugin; lifecycle management too fragile otherwise diff -r aafbb79e93d4 -r 5ee9e6bc21eb audioio/AudioCallbackPlaySource.cpp --- a/audioio/AudioCallbackPlaySource.cpp Fri Oct 08 09:40:16 2010 +0100 +++ b/audioio/AudioCallbackPlaySource.cpp Fri Oct 08 11:19:57 2010 +0100 @@ -962,10 +962,11 @@ if (a && !plugin) { std::cerr << "WARNING: AudioCallbackPlaySource::setAuditioningEffect: auditionable object " << a << " is not a real-time plugin instance" << std::endl; } - RealTimePluginInstance *formerPlugin = m_auditioningPlugin; + + m_mutex.lock(); m_auditioningPlugin = plugin; m_auditioningPluginBypassed = false; - if (formerPlugin) m_pluginScavenger.claim(formerPlugin); + m_mutex.unlock(); } void @@ -1249,7 +1250,7 @@ if (m_auditioningPluginBypassed) return; RealTimePluginInstance *plugin = m_auditioningPlugin; if (!plugin) return; - + if (plugin->getAudioInputCount() != getTargetChannelCount()) { // std::cerr << "plugin input count " << plugin->getAudioInputCount() // << " != our channel count " << getTargetChannelCount()