diff options
author | Robin Gareus <robin@gareus.org> | 2016-04-24 14:41:07 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-04-24 14:43:18 +0200 |
commit | e3607a4c8bbe68714600cb3849abee0c20d0047c (patch) | |
tree | 8c93a2eb519ddd6ed33e1f6b51e42bebcab5f3cf /libs/ardour | |
parent | c4c6c38dbde32fa9478977740864f5c141dff092 (diff) |
plug some memory leaks in libardour
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/audioengine.cc | 2 | ||||
-rw-r--r-- | libs/ardour/auditioner.cc | 6 | ||||
-rw-r--r-- | libs/ardour/graph.cc | 51 | ||||
-rw-r--r-- | libs/ardour/lv2_plugin.cc | 2 | ||||
-rw-r--r-- | libs/ardour/processor.cc | 2 | ||||
-rw-r--r-- | libs/ardour/session.cc | 3 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 1 |
7 files changed, 41 insertions, 26 deletions
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 07a70aebc9..a3ecd04b47 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -114,6 +114,7 @@ AudioEngine::~AudioEngine () for (BackendMap::const_iterator i = _backends.begin(); i != _backends.end(); ++i) { i->second->deinstantiate(); } + delete _main_thread; } AudioEngine* @@ -1234,6 +1235,7 @@ AudioEngine::thread_init_callback (void* arg) AsyncMIDIPort::set_process_thread (pthread_self()); if (arg) { + delete AudioEngine::instance()->_main_thread; /* the special thread created/managed by the backend */ AudioEngine::instance()->_main_thread = new ProcessThread; } diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index fe84a2d717..33f74faf80 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -85,13 +85,17 @@ Auditioner::init () Auditioner::~Auditioner () { + if (asynth) { + asynth->drop_references (); + } + asynth.reset (); } void Auditioner::lookup_synth () { string plugin_id = Config->get_midi_audition_synth_uri(); - asynth = boost::shared_ptr<Processor>(); + asynth.reset (); if (!plugin_id.empty()) { boost::shared_ptr<Plugin> p; p = find_plugin (_session, plugin_id, ARDOUR::LV2); diff --git a/libs/ardour/graph.cc b/libs/ardour/graph.cc index ff4f860d68..3cf0eaea16 100644 --- a/libs/ardour/graph.cc +++ b/libs/ardour/graph.cc @@ -412,15 +412,16 @@ Graph::helper_thread() ProcessThread* pt = new ProcessThread (); resume_rt_malloc_checks (); - pt->get_buffers(); + pt->get_buffers(); - while(1) { - if (run_one()) { - break; - } - } + while(1) { + if (run_one()) { + break; + } + } - pt->drop_buffers(); + pt->drop_buffers(); + delete pt; } /** Here's the main graph thread */ @@ -431,35 +432,35 @@ Graph::main_thread() ProcessThread* pt = new ProcessThread (); resume_rt_malloc_checks (); - pt->get_buffers(); + pt->get_buffers(); - again: - _callback_start_sem.wait (); +again: + _callback_start_sem.wait (); DEBUG_TRACE(DEBUG::ProcessThreads, "main thread is awake\n"); - if (!_threads_active) { - return; - } + if (!_threads_active) { + return; + } prep (); - if (_graph_empty && _threads_active) { - _callback_done_sem.signal (); - DEBUG_TRACE(DEBUG::ProcessThreads, "main thread sees graph done, goes back to sleep\n"); - goto again; - } + if (_graph_empty && _threads_active) { + _callback_done_sem.signal (); + DEBUG_TRACE(DEBUG::ProcessThreads, "main thread sees graph done, goes back to sleep\n"); + goto again; + } /* This loop will run forever */ - while (1) { + while (1) { DEBUG_TRACE(DEBUG::ProcessThreads, "main thread runs one graph node\n"); - if (run_one()) { - break; - } - } + if (run_one()) { + break; + } + } - pt->drop_buffers(); - delete (pt); + pt->drop_buffers(); + delete (pt); } void diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index 5194ae6166..6a5ed97aae 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -808,6 +808,7 @@ LV2Plugin::~LV2Plugin () #endif free(_features); + free(_log_feature.data); free(_make_path_feature.data); free(_work_schedule_feature.data); @@ -828,6 +829,7 @@ LV2Plugin::~LV2Plugin () delete [] _shadow_data; delete [] _defaults; delete [] _ev_buffers; + delete _impl; } bool diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index e55d31ce52..d3ffe152cb 100644 --- a/libs/ardour/processor.cc +++ b/libs/ardour/processor.cc @@ -126,6 +126,8 @@ Processor::state (bool full_state) XMLNode& automation = Automatable::get_automation_xml_state(); if (!automation.children().empty() || !automation.properties().empty()) { node->add_child_nocopy (automation); + } else { + delete &automation; } } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index efc1665219..e9d85300b7 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -101,6 +101,7 @@ #include "ardour/source_factory.h" #include "ardour/speakers.h" #include "ardour/tempo.h" +#include "ardour/ticker.h" #include "ardour/track.h" #include "ardour/user_bundle.h" #include "ardour/utils.h" @@ -306,6 +307,7 @@ Session::Session (AudioEngine &eng, , _speakers (new Speakers) , _order_hint (-1) , ignore_route_processor_changes (false) + , midi_clock (0) , _scene_changer (0) , _midi_ports (0) , _mmc (0) @@ -739,6 +741,7 @@ Session::destroy () delete _midi_ports; _midi_ports = 0; delete _locations; _locations = 0; + delete midi_clock; delete _tempo_map; DEBUG_TRACE (DEBUG::Destruction, "Session::destroy() done\n"); diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 95eb36c07f..d495d0b701 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -251,6 +251,7 @@ Session::post_engine_init () /* MidiClock requires a tempo map */ + delete midi_clock; midi_clock = new MidiClockTicker (); midi_clock->set_session (this); |