From ddbb1808001c6ff128118f4e62fd89261f05bccd Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 19 Dec 2014 21:28:35 +0100 Subject: [PATCH 1/6] Fix memory leaks in LADSPA plugins --- plugins/LadspaEffect/calf/src/audio_fx.cpp | 16 ++++++++++++++++ plugins/LadspaEffect/calf/src/calf/audio_fx.h | 1 + plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h | 1 + plugins/LadspaEffect/calf/src/calf/modules.h | 2 ++ .../LadspaEffect/calf/src/calf/modules_limit.h | 1 + plugins/LadspaEffect/calf/src/modules.cpp | 16 ++++++++++++++++ plugins/LadspaEffect/calf/src/modules_limit.cpp | 8 ++++++++ plugins/LadspaEffect/calf/src/plugin.cpp | 5 +++++ plugins/LadspaEffect/swh/dj_eq_1901.c | 4 ++++ .../swh/fast_lookahead_limiter_1913.c | 1 + plugins/LadspaEffect/swh/imp_1199.c | 5 +++++ plugins/LadspaEffect/swh/vynil_1905.c | 1 + plugins/LadspaEffect/tap/tap_eq.c | 3 ++- plugins/LadspaEffect/tap/tap_eqbw.c | 3 ++- 14 files changed, 65 insertions(+), 2 deletions(-) diff --git a/plugins/LadspaEffect/calf/src/audio_fx.cpp b/plugins/LadspaEffect/calf/src/audio_fx.cpp index a5695be88..f42ccc0a8 100644 --- a/plugins/LadspaEffect/calf/src/audio_fx.cpp +++ b/plugins/LadspaEffect/calf/src/audio_fx.cpp @@ -567,6 +567,22 @@ lookahead_limiter::lookahead_limiter() { asc_coeff = 1.f; } +lookahead_limiter::~lookahead_limiter() +{ + if( buffer != NULL) + { + free(buffer); + } + if( nextpos != NULL) + { + free(nextpos); + } + if( nextdelta != NULL) + { + free(nextdelta); + } +} + void lookahead_limiter::activate() { is_active = true; diff --git a/plugins/LadspaEffect/calf/src/calf/audio_fx.h b/plugins/LadspaEffect/calf/src/calf/audio_fx.h index f71880289..1799de944 100644 --- a/plugins/LadspaEffect/calf/src/calf/audio_fx.h +++ b/plugins/LadspaEffect/calf/src/calf/audio_fx.h @@ -608,6 +608,7 @@ public: void reset_asc(); bool get_asc(); lookahead_limiter(); + ~lookahead_limiter(); void set_multi(bool set); void process(float &left, float &right, float *multi_buffer); void set_sample_rate(uint32_t sr); diff --git a/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h index d94ebcea3..daf7ae258 100644 --- a/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h +++ b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h @@ -47,6 +47,7 @@ struct ladspa_instance: public plugin_ctl_iface #endif ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate); + virtual ~ladspa_instance(); virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); } virtual float get_param_value(int param_no); virtual void set_param_value(int param_no, float value); diff --git a/plugins/LadspaEffect/calf/src/calf/modules.h b/plugins/LadspaEffect/calf/src/calf/modules.h index fb9ba7790..8cde47f62 100644 --- a/plugins/LadspaEffect/calf/src/calf/modules.h +++ b/plugins/LadspaEffect/calf/src/calf/modules.h @@ -263,6 +263,7 @@ class mono_audio_module: } public: mono_audio_module(); + ~mono_audio_module(); void params_changed(); void activate(); void set_sample_rate(uint32_t sr); @@ -291,6 +292,7 @@ class stereo_audio_module: } public: stereo_audio_module(); + ~stereo_audio_module(); void params_changed(); void activate(); void set_sample_rate(uint32_t sr); diff --git a/plugins/LadspaEffect/calf/src/calf/modules_limit.h b/plugins/LadspaEffect/calf/src/calf/modules_limit.h index d5d4b9a52..850aff80d 100644 --- a/plugins/LadspaEffect/calf/src/calf/modules_limit.h +++ b/plugins/LadspaEffect/calf/src/calf/modules_limit.h @@ -84,6 +84,7 @@ public: uint32_t srate; bool is_active; multibandlimiter_audio_module(); + ~multibandlimiter_audio_module(); void activate(); void deactivate(); void params_changed(); diff --git a/plugins/LadspaEffect/calf/src/modules.cpp b/plugins/LadspaEffect/calf/src/modules.cpp index ba06f0201..98b4b8df3 100644 --- a/plugins/LadspaEffect/calf/src/modules.cpp +++ b/plugins/LadspaEffect/calf/src/modules.cpp @@ -460,6 +460,14 @@ stereo_audio_module::stereo_audio_module() { meter_outR = 0.f; } +stereo_audio_module::~stereo_audio_module() +{ + if( buffer != NULL ) + { + free(buffer); + } +} + void stereo_audio_module::activate() { active = true; } @@ -686,6 +694,14 @@ mono_audio_module::mono_audio_module() { meter_outR = 0.f; } +mono_audio_module::~mono_audio_module() +{ + if( buffer != NULL ) + { + free(buffer); + } +} + void mono_audio_module::activate() { active = true; } diff --git a/plugins/LadspaEffect/calf/src/modules_limit.cpp b/plugins/LadspaEffect/calf/src/modules_limit.cpp index f7fb6fc80..3930078bb 100644 --- a/plugins/LadspaEffect/calf/src/modules_limit.cpp +++ b/plugins/LadspaEffect/calf/src/modules_limit.cpp @@ -252,6 +252,14 @@ multibandlimiter_audio_module::multibandlimiter_audio_module() asc_old = true; } +multibandlimiter_audio_module::~multibandlimiter_audio_module() +{ + if( buffer != NULL) + { + free(buffer); + } +} + void multibandlimiter_audio_module::activate() { is_active = true; diff --git a/plugins/LadspaEffect/calf/src/plugin.cpp b/plugins/LadspaEffect/calf/src/plugin.cpp index 7b651de88..0cc02a885 100644 --- a/plugins/LadspaEffect/calf/src/plugin.cpp +++ b/plugins/LadspaEffect/calf/src/plugin.cpp @@ -54,6 +54,11 @@ ladspa_instance::ladspa_instance(audio_module_iface *_module, ladspa_plugin_meta module->post_instantiate(); } +ladspa_instance::~ladspa_instance() +{ + delete module; +} + float ladspa_instance::get_param_value(int param_no) { // XXXKF hack diff --git a/plugins/LadspaEffect/swh/dj_eq_1901.c b/plugins/LadspaEffect/swh/dj_eq_1901.c index a4baa9602..65205c123 100644 --- a/plugins/LadspaEffect/swh/dj_eq_1901.c +++ b/plugins/LadspaEffect/swh/dj_eq_1901.c @@ -116,6 +116,8 @@ static void activateDj_eq_mono(LADSPA_Handle instance) { } static void cleanupDj_eq_mono(LADSPA_Handle instance) { + Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; + free(plugin_data->filters); free(instance); } @@ -283,6 +285,8 @@ static void activateDj_eq(LADSPA_Handle instance) { } static void cleanupDj_eq(LADSPA_Handle instance) { + Dj_eq *plugin_data = (Dj_eq *)instance; + free(plugin_data->filters); free(instance); } diff --git a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c index 8589caf3a..eecd72e8e 100644 --- a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c +++ b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c @@ -137,6 +137,7 @@ static void cleanupFastLookaheadLimiter(LADSPA_Handle instance) { #line 188 "fast_lookahead_limiter_1913.xml" FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance; free(plugin_data->buffer); + free(plugin_data->chunks); free(instance); } diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c index a5c7d3876..d172a927d 100644 --- a/plugins/LadspaEffect/swh/imp_1199.c +++ b/plugins/LadspaEffect/swh/imp_1199.c @@ -202,6 +202,11 @@ static void cleanupImp(LADSPA_Handle instance) { local_free(plugin_data->op); local_free(plugin_data->overlap); local_free(plugin_data->opc); + unsigned int i; + for (i=0; iimpulse_freq[i]); + } + local_free(plugin_data->impulse_freq); free(instance); } diff --git a/plugins/LadspaEffect/swh/vynil_1905.c b/plugins/LadspaEffect/swh/vynil_1905.c index 187aa0f8f..c6aa448b0 100644 --- a/plugins/LadspaEffect/swh/vynil_1905.c +++ b/plugins/LadspaEffect/swh/vynil_1905.c @@ -163,6 +163,7 @@ static void cleanupVynil(LADSPA_Handle instance) { free(plugin_data->buffer_m); free(plugin_data->buffer_s); free(plugin_data->click_buffer); + free(plugin_data->highp); free(plugin_data->lowp_m); free(plugin_data->lowp_s); free(plugin_data->noise_filt); diff --git a/plugins/LadspaEffect/tap/tap_eq.c b/plugins/LadspaEffect/tap/tap_eq.c index daf9463a1..4cc0eb911 100644 --- a/plugins/LadspaEffect/tap/tap_eq.c +++ b/plugins/LadspaEffect/tap/tap_eq.c @@ -145,7 +145,8 @@ activate_eq(LADSPA_Handle instance) { static void cleanup_eq(LADSPA_Handle instance) { - + eq *plugin_data = (eq *)instance; + free(plugin_data->filters); free(instance); } diff --git a/plugins/LadspaEffect/tap/tap_eqbw.c b/plugins/LadspaEffect/tap/tap_eqbw.c index fd9d15d46..3d6b39f26 100644 --- a/plugins/LadspaEffect/tap/tap_eqbw.c +++ b/plugins/LadspaEffect/tap/tap_eqbw.c @@ -167,7 +167,8 @@ activate_eq(LADSPA_Handle instance) { static void cleanup_eq(LADSPA_Handle instance) { - + eq *plugin_data = (eq *)instance; + free(plugin_data->filters); free(instance); } From b59a50133a04458d27c963c2f84c27a9fe8a1523 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 19 Dec 2014 21:35:43 +0100 Subject: [PATCH 2/6] Fix memory leaks in ZynAddSubFX --- plugins/zynaddsubfx/LocalZynAddSubFx.cpp | 10 ++++++++++ plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp | 8 ++++++++ plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h | 2 +- plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp | 2 +- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp index 7bb7e7640..93ba504de 100644 --- a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp @@ -102,6 +102,16 @@ LocalZynAddSubFx::~LocalZynAddSubFx() void LocalZynAddSubFx::initConfig() { + //Delete existing objects before recreating them in config.init(). Neccesarry, because the constructor and setLmmsWorkingDir() invoke this function. + if( config.cfg.LinuxOSSWaveOutDev != NULL ) + { + delete[] config.cfg.LinuxOSSWaveOutDev; + delete[] config.cfg.LinuxOSSSeqInDev; + + for(int i = 0; i < config.winmidimax; ++i) + delete[] config.winmididevices[i].name; + delete[] config.winmididevices; + } config.init(); config.cfg.GzipCompression = 0; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp index e03fcef71..6468f16b1 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp @@ -43,6 +43,14 @@ EQ::EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, in cleanup(); } +EQ::~EQ() +{ + for(int i = 0; i < MAX_EQ_BANDS; ++i) { + delete filter[i].l; + delete filter[i].r; + } +} + // Cleanup the effect void EQ::cleanup(void) diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h index b2e9e89a9..6192861cd 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h @@ -30,7 +30,7 @@ class EQ:public Effect { public: EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); - ~EQ() {} + ~EQ(); void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp index c43f1fa3f..5391b9a5f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp @@ -694,7 +694,7 @@ void ADnote::KillNote() KillVoice(nvoice); if(NoteVoicePar[nvoice].VoiceOut) - delete NoteVoicePar[nvoice].VoiceOut; + delete[] NoteVoicePar[nvoice].VoiceOut; NoteVoicePar[nvoice].VoiceOut = NULL; } From 0a732fbc044ab67a9af0573263f0766b6f8b71e5 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sat, 20 Dec 2014 09:07:21 +0100 Subject: [PATCH 3/6] Fix mismatched free() / delete / delete [] in RmsHelper.h --- include/RmsHelper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/RmsHelper.h b/include/RmsHelper.h index 784a5fd3c..a65c5461b 100644 --- a/include/RmsHelper.h +++ b/include/RmsHelper.h @@ -38,7 +38,7 @@ public: } virtual ~RmsHelper() { - if( m_buffer ) delete m_buffer; + if( m_buffer ) delete[] m_buffer; } inline void setSize( int size ) From e0f7ea57ac7627420448cda60e5a40a24eb85ac7 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sat, 20 Dec 2014 16:30:28 +0100 Subject: [PATCH 4/6] Check if object already exists instead of deleting and recreating it --- plugins/zynaddsubfx/LocalZynAddSubFx.cpp | 10 ------- .../zynaddsubfx/src/Misc/Config.cpp | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp index 93ba504de..7bb7e7640 100644 --- a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp @@ -102,16 +102,6 @@ LocalZynAddSubFx::~LocalZynAddSubFx() void LocalZynAddSubFx::initConfig() { - //Delete existing objects before recreating them in config.init(). Neccesarry, because the constructor and setLmmsWorkingDir() invoke this function. - if( config.cfg.LinuxOSSWaveOutDev != NULL ) - { - delete[] config.cfg.LinuxOSSWaveOutDev; - delete[] config.cfg.LinuxOSSSeqInDev; - - for(int i = 0; i < config.winmidimax; ++i) - delete[] config.winmididevices[i].name; - delete[] config.winmididevices; - } config.init(); config.cfg.GzipCompression = 0; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp index d38c88bca..72a8046f4 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp @@ -42,10 +42,16 @@ void Config::init() cfg.OscilSize = 1024; cfg.SwapStereo = 0; - cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); - cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); + if( cfg.LinuxOSSWaveOutDev == NULL ) //Check, if object already exists befroe creating it. + { + cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); + } + if( cfg.LinuxOSSSeqInDev == NULL ) //Check, if object already exists befroe creating it. + { + cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); + } cfg.DumpFile = "zynaddsubfx_dump.txt"; @@ -67,11 +73,14 @@ void Config::init() winwavemax = 1; winmidimax = 1; //try to find out how many input midi devices are there - winmididevices = new winmidionedevice[winmidimax]; - for(int i = 0; i < winmidimax; ++i) { - winmididevices[i].name = new char[MAX_STRING_SIZE]; - for(int j = 0; j < MAX_STRING_SIZE; ++j) - winmididevices[i].name[j] = '\0'; + if( winmididevices == NULL ) //Check, if object already exists befroe creating it. + { + winmididevices = new winmidionedevice[winmidimax]; + for(int i = 0; i < winmidimax; ++i) { + winmididevices[i].name = new char[MAX_STRING_SIZE]; + for(int j = 0; j < MAX_STRING_SIZE; ++j) + winmididevices[i].name[j] = '\0'; + } } From 36d02b9887de5bb8eb440033ea93689808054c53 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Mon, 22 Dec 2014 11:35:25 +0100 Subject: [PATCH 5/6] Fix memory leaks in Audio setup tab in the settings dialog --- src/core/audio/AudioAlsa.cpp | 2 +- src/core/audio/AudioJack.cpp | 1 + src/core/audio/AudioOss.cpp | 2 +- src/core/audio/AudioPulseAudio.cpp | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/audio/AudioAlsa.cpp b/src/core/audio/AudioAlsa.cpp index 5421fc6b5..c39644216 100644 --- a/src/core/audio/AudioAlsa.cpp +++ b/src/core/audio/AudioAlsa.cpp @@ -523,7 +523,7 @@ AudioAlsa::setupWidget::setupWidget( QWidget * _parent ) : AudioAlsa::setupWidget::~setupWidget() { - + delete m_channels->model(); } diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index c2b63dccf..3dd6d3a75 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -464,6 +464,7 @@ AudioJack::setupWidget::setupWidget( QWidget * _parent ) : AudioJack::setupWidget::~setupWidget() { + delete m_channels->model(); } diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp index ad951d498..3db660fe5 100644 --- a/src/core/audio/AudioOss.cpp +++ b/src/core/audio/AudioOss.cpp @@ -356,7 +356,7 @@ AudioOss::setupWidget::setupWidget( QWidget * _parent ) : AudioOss::setupWidget::~setupWidget() { - + delete m_channels->model(); } diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp index 574577b2f..2616e785d 100644 --- a/src/core/audio/AudioPulseAudio.cpp +++ b/src/core/audio/AudioPulseAudio.cpp @@ -307,7 +307,7 @@ AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) : AudioPulseAudio::setupWidget::~setupWidget() { - + delete m_channels->model(); } From 5bf095b6b98be761eed6a6ab38c065f8b2adc0aa Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Wed, 24 Dec 2014 20:08:14 +0100 Subject: [PATCH 6/6] Revert Zynaddsubfx changes --- .../zynaddsubfx/src/Effects/EQ.cpp | 8 ------ .../zynaddsubfx/zynaddsubfx/src/Effects/EQ.h | 2 +- .../zynaddsubfx/src/Misc/Config.cpp | 27 +++++++------------ .../zynaddsubfx/src/Synth/ADnote.cpp | 2 +- 4 files changed, 11 insertions(+), 28 deletions(-) diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp index 6468f16b1..e03fcef71 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp @@ -43,14 +43,6 @@ EQ::EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, in cleanup(); } -EQ::~EQ() -{ - for(int i = 0; i < MAX_EQ_BANDS; ++i) { - delete filter[i].l; - delete filter[i].r; - } -} - // Cleanup the effect void EQ::cleanup(void) diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h index 6192861cd..b2e9e89a9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h @@ -30,7 +30,7 @@ class EQ:public Effect { public: EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); - ~EQ(); + ~EQ() {} void out(const Stereo &smp); void setpreset(unsigned char npreset); void changepar(int npar, unsigned char value); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp index 72a8046f4..d38c88bca 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp @@ -42,16 +42,10 @@ void Config::init() cfg.OscilSize = 1024; cfg.SwapStereo = 0; - if( cfg.LinuxOSSWaveOutDev == NULL ) //Check, if object already exists befroe creating it. - { - cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); - } - if( cfg.LinuxOSSSeqInDev == NULL ) //Check, if object already exists befroe creating it. - { - cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; - snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); - } + cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp"); + cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE]; + snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer"); cfg.DumpFile = "zynaddsubfx_dump.txt"; @@ -73,14 +67,11 @@ void Config::init() winwavemax = 1; winmidimax = 1; //try to find out how many input midi devices are there - if( winmididevices == NULL ) //Check, if object already exists befroe creating it. - { - winmididevices = new winmidionedevice[winmidimax]; - for(int i = 0; i < winmidimax; ++i) { - winmididevices[i].name = new char[MAX_STRING_SIZE]; - for(int j = 0; j < MAX_STRING_SIZE; ++j) - winmididevices[i].name[j] = '\0'; - } + winmididevices = new winmidionedevice[winmidimax]; + for(int i = 0; i < winmidimax; ++i) { + winmididevices[i].name = new char[MAX_STRING_SIZE]; + for(int j = 0; j < MAX_STRING_SIZE; ++j) + winmididevices[i].name[j] = '\0'; } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp index 5391b9a5f..c43f1fa3f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp @@ -694,7 +694,7 @@ void ADnote::KillNote() KillVoice(nvoice); if(NoteVoicePar[nvoice].VoiceOut) - delete[] NoteVoicePar[nvoice].VoiceOut; + delete NoteVoicePar[nvoice].VoiceOut; NoteVoicePar[nvoice].VoiceOut = NULL; }