summaryrefslogtreecommitdiff
path: root/libs/ardour/control_protocol_manager.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-07-25 17:16:32 +0200
committerRobin Gareus <robin@gareus.org>2016-07-25 17:16:32 +0200
commiteec294a97edce69ca71c972867ab708d5dd5625d (patch)
treed48202a8e6b5978ba1d6d5a83a574b3a91687460 /libs/ardour/control_protocol_manager.cc
parentac8f4baa002db37506a84088861b7a288dcdfae6 (diff)
the endless quest to plug memory leaks -- episode 378
Diffstat (limited to 'libs/ardour/control_protocol_manager.cc')
-rw-r--r--libs/ardour/control_protocol_manager.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc
index 2b0a4dce4c..a0a36c17dd 100644
--- a/libs/ardour/control_protocol_manager.cc
+++ b/libs/ardour/control_protocol_manager.cc
@@ -43,6 +43,22 @@ using namespace PBD;
ControlProtocolManager* ControlProtocolManager::_instance = 0;
const string ControlProtocolManager::state_node_name = X_("ControlProtocols");
+
+ControlProtocolInfo::~ControlProtocolInfo ()
+{
+ if (protocol && descriptor) {
+ descriptor->destroy (descriptor, protocol);
+ protocol = 0;
+ }
+
+ delete state; state = 0;
+
+ if (descriptor) {
+ delete (Glib::Module*) descriptor->module;
+ descriptor = 0;
+ }
+}
+
ControlProtocolManager::ControlProtocolManager ()
{
}
@@ -434,6 +450,7 @@ ControlProtocolManager::set_state (const XMLNode& node, int /*version*/)
ControlProtocolInfo* cpi = cpi_by_name (prop->value());
if (cpi) {
+ delete cpi->state;
cpi->state = new XMLNode (**citer);
if (active) {