From: Robin Gareus Date: Sat, 12 Sep 2015 18:05:25 +0000 (+0200) Subject: plug some memory leaks in libs X-Git-Tag: 4.3~419 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=eb998b32640e83828ff3c81eabf86fe0f319bbcd plug some memory leaks in libs --- diff --git a/libs/ardour/buffer_set.cc b/libs/ardour/buffer_set.cc index f64eec3191..cd0a9c5058 100644 --- a/libs/ardour/buffer_set.cc +++ b/libs/ardour/buffer_set.cc @@ -87,6 +87,13 @@ BufferSet::clear() _vst_buffers.clear (); #endif +#ifdef LV2_SUPPORT + for (LV2Buffers::iterator i = _lv2_buffers.begin(); i != _lv2_buffers.end(); ++i) { + delete (*i).second; + } + _lv2_buffers.clear (); +#endif + } /** Set up this BufferSet so that its data structures mirror a PortSet's buffers. diff --git a/libs/ardour/graph.cc b/libs/ardour/graph.cc index b321968daf..8cce0efdbc 100644 --- a/libs/ardour/graph.cc +++ b/libs/ardour/graph.cc @@ -459,6 +459,7 @@ Graph::main_thread() } pt->drop_buffers(); + delete (pt); } void diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index 13241f2a8b..56f1adcc90 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -699,6 +699,7 @@ LV2Plugin::~LV2Plugin () delete [] _control_data; delete [] _shadow_data; + delete [] _defaults; delete [] _ev_buffers; } diff --git a/libs/gtkmm2ext/gtkmm2ext/pixfader.h b/libs/gtkmm2ext/gtkmm2ext/pixfader.h index 0a316340b4..c5ed9c585c 100644 --- a/libs/gtkmm2ext/gtkmm2ext/pixfader.h +++ b/libs/gtkmm2ext/gtkmm2ext/pixfader.h @@ -36,6 +36,7 @@ class LIBGTKMM2EXT_API PixFader : public CairoWidget public: PixFader (Gtk::Adjustment& adjustment, int orientation, int span, int girth); virtual ~PixFader (); + static void flush_pattern_cache(); sigc::signal StartGesture; sigc::signal StopGesture; diff --git a/libs/gtkmm2ext/pixfader.cc b/libs/gtkmm2ext/pixfader.cc index 1e814fd147..e27945128e 100644 --- a/libs/gtkmm2ext/pixfader.cc +++ b/libs/gtkmm2ext/pixfader.cc @@ -85,6 +85,15 @@ PixFader::~PixFader () if (_layout) _layout.clear (); // drop reference to existing layout } +void +PixFader::flush_pattern_cache () { + for (list::iterator f = _patterns.begin(); f != _patterns.end(); ++f) { + cairo_pattern_destroy ((*f)->pattern); + } + _patterns.clear(); +} + + cairo_pattern_t* PixFader::find_pattern (double afr, double afg, double afb, double abr, double abg, double abb, diff --git a/libs/midi++2/port.cc b/libs/midi++2/port.cc index 90ec260eae..b7d12872e8 100644 --- a/libs/midi++2/port.cc +++ b/libs/midi++2/port.cc @@ -81,6 +81,8 @@ Port::~Port () for (int i = 0; i < 16; i++) { delete _channel[i]; } + + delete _parser; } /** Send a clock tick message. diff --git a/libs/pbd/fpu.cc b/libs/pbd/fpu.cc index 97e6ed59dd..33e646f744 100644 --- a/libs/pbd/fpu.cc +++ b/libs/pbd/fpu.cc @@ -129,6 +129,13 @@ FPU::instance() return _instance; } +void +FPU::destroy () +{ + delete _instance; + _instance = 0; +} + FPU::FPU () : _flags ((Flags) 0) { diff --git a/libs/pbd/pbd.cc b/libs/pbd/pbd.cc index 17d1588788..cf7e523349 100644 --- a/libs/pbd/pbd.cc +++ b/libs/pbd/pbd.cc @@ -34,6 +34,7 @@ #include "pbd/error.h" #include "pbd/id.h" #include "pbd/enumwriter.h" +#include "pbd/fpu.h" #ifdef PLATFORM_WINDOWS #include @@ -111,4 +112,5 @@ PBD::cleanup () #endif EnumWriter::destroy (); + FPU::destroy (); } diff --git a/libs/pbd/pbd/fpu.h b/libs/pbd/pbd/fpu.h index 4ab1a83561..463fef3ff2 100644 --- a/libs/pbd/pbd/fpu.h +++ b/libs/pbd/pbd/fpu.h @@ -38,6 +38,7 @@ class LIBPBD_API FPU { ~FPU (); static FPU* instance(); + static void destroy(); bool has_flush_to_zero () const { return _flags & HasFlushToZero; } bool has_denormals_are_zero () const { return _flags & HasDenormalsAreZero; }