summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/ladspa_plugin.h
diff options
context:
space:
mode:
authorSampo Savolainen <v2@iki.fi>2007-09-25 17:56:39 +0000
committerSampo Savolainen <v2@iki.fi>2007-09-25 17:56:39 +0000
commit05b27b52a2be32dc6adb7332285fb10191aa690c (patch)
tree0cd20f291ddad7f5b41274ee2f94f4dafc51aa59 /libs/ardour/ardour/ladspa_plugin.h
parent08d255de89a4bbc60e36204bc23e41cfdcb90820 (diff)
Make sure activate() and deactivate() are never run multiple times in a
row. Make cleanup work nicely git-svn-id: svn://localhost/ardour2/trunk@2485 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour/ladspa_plugin.h')
-rw-r--r--libs/ardour/ardour/ladspa_plugin.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/libs/ardour/ardour/ladspa_plugin.h b/libs/ardour/ardour/ladspa_plugin.h
index 4c8d9ff741..3365384321 100644
--- a/libs/ardour/ardour/ladspa_plugin.h
+++ b/libs/ardour/ardour/ladspa_plugin.h
@@ -66,17 +66,29 @@ class LadspaPlugin : public ARDOUR::Plugin
std::set<Parameter> automatable() const;
uint32_t nth_parameter (uint32_t port, bool& ok) const;
void activate () {
+ if (was_activated)
+ return;
+
if (descriptor->activate) {
descriptor->activate (handle);
}
+
was_activated = true;
}
void deactivate () {
- if (descriptor->deactivate)
+ if (!was_activated)
+ return;
+
+ if (descriptor->deactivate) {
descriptor->deactivate (handle);
+ }
+
+ was_activated = false;
}
void cleanup () {
- if (was_activated && descriptor->cleanup) {
+ deactivate();
+
+ if (descriptor->cleanup) {
descriptor->cleanup (handle);
}
}