diff options
author | David Robillard <d@drobilla.net> | 2010-02-17 19:40:36 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-17 19:40:36 +0000 |
commit | 8aacf1bd969d4aa8bdcc309b11eeface31fe9878 (patch) | |
tree | 98684f9ac7b55c0275b195e9d250f694f3fa3460 /src/engine/LADSPANode.cpp | |
parent | 35369ade66f8410e828316a34de539a3c235c79d (diff) | |
download | ingen-8aacf1bd969d4aa8bdcc309b11eeface31fe9878.tar.gz ingen-8aacf1bd969d4aa8bdcc309b11eeface31fe9878.tar.bz2 ingen-8aacf1bd969d4aa8bdcc309b11eeface31fe9878.zip |
Fix crash when rapidly decreasing polyphony (make SetMetadataEvent blocking if polyphony is changed).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2461 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/LADSPANode.cpp')
-rw-r--r-- | src/engine/LADSPANode.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/engine/LADSPANode.cpp b/src/engine/LADSPANode.cpp index 2a10042a..07920b90 100644 --- a/src/engine/LADSPANode.cpp +++ b/src/engine/LADSPANode.cpp @@ -43,7 +43,13 @@ using namespace Shared; * Object is not usable until instantiate() is called with success. * (It _will_ crash!) */ -LADSPANode::LADSPANode(PluginImpl* plugin, const string& path, bool polyphonic, PatchImpl* parent, const LADSPA_Descriptor* descriptor, SampleRate srate, size_t buffer_size) +LADSPANode::LADSPANode(PluginImpl* plugin, + const string& path, + bool polyphonic, + PatchImpl* parent, + const LADSPA_Descriptor* descriptor, + SampleRate srate, + size_t buffer_size) : NodeBase(plugin, path, polyphonic, parent, srate, buffer_size) , _descriptor(descriptor) , _instances(NULL) @@ -55,8 +61,9 @@ LADSPANode::LADSPANode(PluginImpl* plugin, const string& path, bool polyphonic, LADSPANode::~LADSPANode() { - for (uint32_t i=0; i < _polyphony; ++i) - _descriptor->cleanup((*_instances)[i]); + if (_instances) + for (uint32_t i=0; i < _polyphony; ++i) + _descriptor->cleanup((*_instances)[i]); delete _instances; } @@ -81,9 +88,9 @@ LADSPANode::prepare_poly(BufferFactory& bufs, uint32_t poly) } // Initialize the values of new ports - for (unsigned long j=0; j < num_ports(); ++j) { - PortImpl* const port = _ports->at(j); - Buffer* buffer = port->prepared_buffer(i).get(); + for (uint32_t j = 0; j < num_ports(); ++j) { + PortImpl* const port = _ports->at(j); + Buffer* const buffer = port->prepared_buffer(i).get(); // FIXME: Preserve individual voice values if (port->type() == PortType::CONTROL) { |