summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-24 14:41:07 +0200
committerRobin Gareus <robin@gareus.org>2016-04-24 14:43:18 +0200
commite3607a4c8bbe68714600cb3849abee0c20d0047c (patch)
tree8c93a2eb519ddd6ed33e1f6b51e42bebcab5f3cf /libs
parentc4c6c38dbde32fa9478977740864f5c141dff092 (diff)
plug some memory leaks in libardour
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/audioengine.cc2
-rw-r--r--libs/ardour/auditioner.cc6
-rw-r--r--libs/ardour/graph.cc51
-rw-r--r--libs/ardour/lv2_plugin.cc2
-rw-r--r--libs/ardour/processor.cc2
-rw-r--r--libs/ardour/session.cc3
-rw-r--r--libs/ardour/session_state.cc1
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);